Почему toBinaryString не является методом экземпляра в классе Integer?
Простой вопрос дизайна.
Пример кода:
Integer int1 = new Integer(20);
System.out.println(Integer.toBinaryString(int1));
Почему дизайн JDK не похож на следующее? поэтому функция toBinaryString возвращает желаемый результат?
System.out.println(int1.toBinaryString());
Помимо широкого использования статической функции, каковы другие причины такого подхода к дизайну? Используют ли они какой-либо конкретный шаблон проектирования? Если это так, то какой шаблон?
Ответы
Ответ 1
Ваш пример кода создает экземпляр Integer
, а затем распаковывает его. Там нет необходимости:
int int1 = 20;
String binary = Integer.toBinaryString(int1);
Если это был метод экземпляра, вы должны были бы создать экземпляр Integer
только для преобразования int
в его двоичное представление, что было бы неприятно.
Другими словами: чтобы избежать ненужного создания объектов.
Ответ 2
Это связано с тем, что вы не можете иметь два метода с тем же именем, один статический и один экземпляр. Имея два разных имени метода для той же функции снова, было бы запутанным.
Вставка статического метода казалась более логичной, поскольку в этом случае вам не нужно было "обертывать" int в Integer, прежде чем получать его двоичное представление, и оно служит как целям (двоичная строка для int
, так и для Integer
).
Ответ 3
Назад, когда этот метод был добавлен, в JDK1.0.2 не было автобоксинга, а JVM были намного медленнее, чем сейчас. Я полагаю, что использование этого статического метода позволяет легко конвертировать как int, так и Integer в двоичную строку и без необходимости создавать новый экземпляр Integer только для преобразования int в двоичный файл.
Ответ 4
int, char, double... это тип данных по умолчанию, это не объект. Метод должен быть частью Object not datatype.
Такой статический метод более эффективен, чем метод экземпляра.