Нет. В стандартной библиотеке классов Java SE такого метода нет.
Дизайнеры считают, что в Java это не нужно, поскольку язык устраняет необходимость в приложении 1 , чтобы знать, сколько места нужно зарезервировать для примитивного значения, объекта или массив с заданным количеством элементов.
Вы можете подумать, что оператор sizeof будет полезен для людей, которым необходимо знать, сколько места занимают их структуры данных. Однако вы также можете получить эту информацию и многое другое, просто и надежно, используя профилировщик памяти Java, поэтому нет необходимости в методе sizeof.
Предыдущие комментаторы указывали, что sizeof(someType)
будет более читабельным, чем 4
. Если вы примете этот аргумент читабельности, значит, лекарство в ваших руках. Просто определите класс следующим образом ...
public class PrimitiveSizes {
public static int sizeof(byte b) { return 1; }
public static int sizeof(short s) { return 2; }
// etcetera
}
... и статически импортировать его ...
import static PrimitiveSizes.*;
Или определить несколько именованных констант; например,
public static final int SIZE_OF_INT = 4;
Или (Java 8 и более поздние версии) используйте константу Integer.BYTES
и т. Д.
Почему разработчики Java не реализовали это в стандартных библиотеках? Я думаю, что:
- они не думают, что в этом есть необходимость,
- они не думают, что на него есть достаточный спрос, и
- они не думают, что это стоит усилий.
Существует также проблема, связанная с тем, что следующим требованием будет метод sizeof(Object o)
, что чревато техническими трудностями.
Ключевое слово в вышесказанном - "они"!
Не имеет значения, что вы или я об этом думаете. И, следовательно, обсуждение этой темы в комментариях является спорным. Пожалуйста, просто не надо.
1 - программисту может понадобиться знать, чтобы проектировать структуры данных с эффективным использованием пространства. Однако я не могу себе представить, почему эта информация понадобится в коде приложения во время выполнения посредством вызова метода.