Разработка языка Java с помощью toString - PullRequest
9 голосов
/ 23 июля 2010

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

Ответы [ 4 ]

9 голосов
/ 23 июля 2010

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

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

2 голосов
/ 23 июля 2010

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

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

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

2 голосов
/ 23 июля 2010

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

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

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

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

1 голос
/ 23 июля 2010

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

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

...