Дизайн Языка Java с toString

Мы сделали они принимают решение не реализовать a toString метод для int[], но вместо этого позвольте ему наследоваться toString метод от Object?

9
задан Christian 31 March 2016 в 23:57
поделиться

4 ответа

Они действительно реализовали более разумные методы toString для массивов. Они расположены в классе java.util.Arrays .

Что касается рассуждений. На основании переопределений, предоставленных в классе Arrays , я предполагаю, что попытка реализовать универсальный toString для различных типов массивов либо сложна, либо невозможна. Метод toString должен знать, с каким типом массива он работает, и соответствующим образом выводить данные. Например, Object [] должен использовать toString для каждого элемента, тогда как char [] должен выводить символ, а числовые типы данных должны быть преобразованы в числовые. нить.

Методы в Массивы получают это бесплатно, потому что типы фиксированы из-за переопределений.

9
ответ дан 4 December 2019 в 14:26
поделиться

Здесь немного догадок, но ...

Не существует очевидного строкового представления массива int. Люди делают это по-разному: через запятую, через пробел, в квадратные или круглые скобки или ничего. Это, вероятно, привело к решению не реализовывать его в Java 1.1, поскольку это был код с низким приоритетом (поскольку любой может очень просто реализовать метод для записи массива в виде строки).

Теперь вы не можете обновить его до Java 1.2 или новее, потому что это нарушит совместимость для всех, кто уже использует старое поведение. Однако вы можете добавить служебный класс, который реализует некоторые функции, и это то, что они сделали с java.util.Arrays.

1
ответ дан 4 December 2019 в 14:26
поделиться

Думаю, по следующей причине: как они узнают, как пользователи захотят представить свой массив? Это может быть «размер массива: 10» или «[x, y, z]».

Они дали вам значение по умолчанию, если вы хотите сделать что-то еще, это легко сделать.

Вы можете использовать Apache ToStringBuilder, чтобы упростить задачу ...

http://commons.apache.org/lang/api/org/apache/commons/lang/builder/ToStringBuilder.html

2
ответ дан 4 December 2019 в 14:26
поделиться

Я предполагаю, что поскольку объекты Array не были созданы в исходном коде Java разработчиками языка - они созданы компилятором Java. Помните, что у вас может быть массив любого типа объекта, поэтому компилятор создает объект Array в соответствии с требуемым типом.

Если бы они создали стандартный метод, не сразу стало бы понятно, как он должен работать. Например, выполнение toString () и объединение результатов может быть приемлемым для небольшого массива, но не работает для многомерного массива или массива с 1000 записями. Поэтому я думаю, что метод toString () не создан для обеспечения согласованности всех массивов.

По общему признанию, это раздражает, и иногда мне кажется, что что-то вроде "Array [" + size + "] of" + getClassName () было бы намного лучше, чем значение по умолчанию.

2
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: