Почему toBinaryString не является методом экземпляра в классе Integer? - PullRequest
10 голосов
/ 13 июля 2011

Простой вопрос дизайна.

Пример кода:

    Integer int1 = new Integer(20);     
    System.out.println(Integer.toBinaryString(int1));

Почему дизайн JDK не похож на следующий?Итак, функция toBinaryString возвращает желаемый результат?

    System.out.println(int1.toBinaryString());

Помимо широкого использования статической функции, каковы другие причины для этого подхода к проектированию?Они используют какой-то конкретный шаблон дизайна?Если это так, то какой шаблон?

Ответы [ 4 ]

15 голосов
/ 13 июля 2011

Это потому, что у вас не может быть двух методов с одинаковым именем, одного статического и одного экземпляра.Снова иметь два разных имени метода для одной и той же функциональности было бы непонятно.

Вставка статического метода казалась более логичной, поскольку в этом случае вам не пришлось бы «оборачивать» int в Integer, прежде чем получить егодвоичное представление, и оно служит обеим целям (двоичная строка для int и для Integer).

9 голосов
/ 13 июля 2011

Ваш пример кода создает экземпляр Integer и затем распаковывает его.В этом нет необходимости:

int int1 = 20;
String binary = Integer.toBinaryString(int1);

Если бы это был метод экземпляра, вы бы были вынуждены создать экземпляр Integer исключительно для преобразования int в егодвоичное представление, которое будет раздражать.

Другими словами: избегать ненужного создания объектов.

6 голосов
/ 13 июля 2011

Назад, когда этот метод был добавлен, в JDK1.0.2 не было автобокса, и JVM были намного медленнее, чем сейчас. Я полагаю, что использование этого статического метода позволило легко преобразовать как int, так и Integer в двоичную строку, и при этом не нужно было создавать новый экземпляр Integer только для преобразования int в двоичный файл.

0 голосов
/ 13 июля 2011

int, char, double ... это тип данных по умолчанию, это не объект.Метод должен быть частью объекта, а не типа данных.

Такой статический метод более эффективен, чем метод экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...