Это было интересно изучить. Класс Objects
, наряду с этим метод .compare()
, был введен в 3b45b809d8ff Джо Дарси, а сообщение о фиксации цитирует Bug 6797535 и указывает на «Шерман» (Xueming Shen?), Подписанный на нем. В дополнение к ошибке есть this thread с сентября 2009 года, обсуждая, какие функции добавить в Objects
. В обсуждении темы обсуждения добавьте методы примитивного сравнения compare(int, int)
(и т.п.) и, в конечном итоге, решите, что они должны находиться в соответствующих классах оболочек (см. Integer.compare()
). Этот метод введен later in that thread, но без комментариев, которые я могу найти.
Позже a patch is sent out for review, содержащие Objects.compare()
и Joshua Bloch replies:
Я не думаю, что вы должны добавить этот метод (для сравнения (Т а, Т Ь, компаратор с)). Его полезность неясна, и она не имеет отношения мощности к весу других типов в этом классе.
Darcy responds:
Да, я включил это с "Пункт 12: Рассмотреть возможность осуществления Сопоставимые" из EJv2 в виду.
Непонятно, что этот метод приводит к таблице относительно Item 12, но проблема, похоже, не была поднята снова. Я полагаю, что целью было предоставить метод, эквивалентный примитиву compare()
, по стилистическим причинам, но я не нашел доказательств, которые на самом деле были причиной.
Стоит заметить, что в том же обмене между Дарси и Блох метод Objects.toString()
аналогично критикуемой Блох:
Я бы определенно/не/добавить этот метод (Objects.toString).Это ничего не приносит в таблицу, которая еще не существует. Люди знают и используют String.valueOf. Давайте не будем мутить воды, добавив еще один выбор.
Но, как мы знаем, что это не был удален, Дарси просто ответил:
Так отмечено.
Итак, в заключение, как мне кажется, как это было введено без особого намерения. Было предложено, и возражения, которые были подняты, не блокировали его проверку. Я полагаю, что более строгий обзор дизайна мог бы ошибиться на стороне его отказа, как предложил Блох.
Вы также можете быть заинтересованы в этом подобный вопрос (хотя речь идет о детали реализации, а не изменение API): Why is Arrays.fill() not used in HashMap.clear() anymore?
этот метод абсолютно глупо, я согласен. [Заказ 'Guava'] (https://code.google.com/p/guava-libraries/wiki/OrderingExplained) намного лучше справляется с решением этой проблемы. –
Метод не используется нигде в JDK :), вероятно, бесполезен. – ZhongYu
Единственное, что делает этот метод, это проверить, являются ли оба аргумента равными нулю, если ваш компаратор не проверяет этот случай. совершенно бесполезно, как и большинство этого класса – njzk2