Мы приняли решение не реализовывать метод toString
для int[]
, а вместо этого позволить ему наследовать метод toString
от Object
?
Дизайн языка Java с toString
Ответы (4)
Они реализовали более разумные методы toString
для массивов. Они находятся в классе java.util.Arrays
.
Что касается рассуждений. Я предполагаю, что из-за переопределений, предоставленных в классе Arrays
, попытка реализовать общий toString
для разных типов массивов либо сложна, либо невозможна. Метод toString
должен знать, с каким типом массива он работает, и соответствующим образом выводить данные. Например, Object[]
должен использовать toString
для каждого элемента, а char[]
должен выводить символ, а числовые типы данных должны быть преобразованы в числовую строку.
Методы в Arrays
получают это бесплатно, потому что типы фиксированы благодаря переопределениям.
changing Object to have a sensible toString() for arrays
? Вы предлагаете исправить исходный код солнца?
- person Sean Patrick Floyd; 23.07.2010
Я думаю, из-за следующих рассуждений: как они узнают, как пользователи захотят представить свой массив? Это может быть «размер массива: 10» или «[x, y, z]».
Они дали вам значение по умолчанию, если вы хотите сделать что-то другое, это легко сделать.
Вы можете использовать apache ToStringBuilder, чтобы упростить...
http://commons.apache.org/lang/api/org/apache/commons/lang/builder/ToStringBuilder.html
toString()
для массива со 100 000 элементов может иметь катастрофические последствия. И цель toString()
заключается не только в отображении содержимого объекта, но и в отображении удобочитаемой формы для отображения в инструментах, отладчиках и т. д.
- person matt b; 23.07.2010
Я предполагаю, что, поскольку объекты Array не были созданы в исходном коде Java разработчиками языка, они созданы компилятором Java. Помните, что у вас может быть массив любого типа объекта, поэтому компилятор создает объект Array в соответствии с требуемым типом.
Если бы они создали стандартный метод, не сразу было бы очевидно, как он должен работать. Например, выполнение toString()
и объединение результатов может быть допустимо для небольшого массива, но не работает для многомерного массива или массива с 1000 элементов. Поэтому я думаю, что метод toString()
не создан для обеспечения согласованности всех массивов.
По общему признанию, это раздражает, и иногда я думаю, что что-то вроде "Array[" + size + "] of " + getClassName()
было бы намного лучше, чем по умолчанию.
Тут немного догадок, но...
Не существует очевидного строкового представления массива int. Люди делают это по-разному: через запятую, через пробел, заключают в квадратные или круглые скобки или никак. Это, вероятно, привело к решению не реализовывать его в Java 1.1, наряду с тем, что он является кодом с низким приоритетом (поскольку любой может очень просто реализовать метод для записи массива в виде строки).
Теперь вы не можете обновить его до Java 1.2 или более поздней версии, потому что это нарушило бы совместимость для тех, кто уже использует старое поведение. Однако вы можете добавить служебный класс, который реализует некоторые функции, и это то, что они сделали с java.util.Arrays.
java.util.Arrays.toString
…? - person Konrad Rudolph   schedule 23.07.2010