Переопределение равняется методу по сравнению с созданием нового метода

Вы можете реализовать BaseUrl и передать это вместо фиксированного URL. проверить эту ссылку . Другой подход реализует Endpoint и использует setUrl(). Поэтому для изменения некоторого значения заголовка во время выполнения вы можете использовать перехватчик и добавить его в OkHttp.

19
задан Cœur 27 April 2017 в 18:00
поделиться

7 ответов

Переопределение равняется методу, необходимо, если Вы хотите протестировать эквивалентность в стандартных классах библиотеки (например, гарантируя java.util. Набор содержит уникальные элементы или использующие объекты как ключи java.util. Объекты карты).

Примечание, если Вы переопределяете, равняется, удостоверьтесь, чтобы Вы соблюдали контракт API, как описано в документации. Например, удостоверьтесь, чтобы Вы также переопределили Object.hashCode:

, Если два объекта равны согласно, равняется (Объектному) методу, то вызов метода хэш-кода на каждом из двух объектов должен привести к тому же целочисленному результату.

РЕДАКТИРОВАНИЕ: Я не отправил это как полный ответ на предмете, таким образом, я повторю оператор Fredrik Kalseth, что переопределение равняется работам лучше всего для неизменные объекты . Заключить API в кавычки для Карта :

Примечание: большую заботу нужно соблюдать, если изменяемые объекты используются в качестве ключей карты. Поведение карты не указано, если значение объекта изменяется способом, который влияние равняется сравнениям, в то время как объект является ключом в карте.

19
ответ дан 30 November 2019 в 03:53
поделиться

Я настоятельно рекомендовал бы забирание копии Эффективного Java и прочтения объекта, 7 повиновения эти равняется контракту . Необходимо быть осторожными, если Вы являетесь переопределяющими, равняется для изменяемых объектов, столько же наборов, таких как Карты и использование Наборов равняется для определения эквивалентности, и видоизменение объекта, содержавшегося в наборе, могло привести к неожиданным результатам. У Brian Goetz также есть довольно хорошее , обзор реализации равняется и хэш-код .

8
ответ дан 30 November 2019 в 03:53
поделиться

Вы никогда не должны переопределять, равняется & getHashCode для изменяемых объектов - это идет для .NET и Java оба. Если Вы делаете и используете такой объект в качестве ключа f.ex словарь и затем изменение , что объект, Вы будете в беде, потому что словарь полагается на хэш-код для нахождения объекта.

Вот хорошая статья о теме: http://weblogs.asp.net/bleroy/archive/2004/12/15/316601.aspx

4
ответ дан 30 November 2019 в 03:53
поделиться

упоминания @David Schlosnagle упоминания Josh Bloch Эффективный Java - это обязательно для чтения для любого Java-разработчика.

существует связанная проблема: для неизменных объектов значения необходимо также рассмотреть переопределение compare_to. Стандартная формулировка для того, если они отличаются, находится в Сопоставимый API:

Это обычно имеет место, но не строго требуется что (выдерживают сравнение (x, y) == 0), == (x.equals (y)). Вообще говоря, любой компаратор, который нарушает это условие, должен ясно указать на этот факт. Рекомендуемый язык является "Примечанием: этот компаратор налагает упорядочивания, которые несовместимы, равняется".

2
ответ дан 30 November 2019 в 03:53
поделиться

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

необходимо создать новый метод для тестирования на эквивалентность в различных экземплярах, если Вы нуждаетесь к (или используете метод CompareTo в некоторых классах.NET)

0
ответ дан 30 November 2019 в 03:53
поделиться

Честно говоря, в Java нет действительно аргумента против переопределения , равняется . Если необходимо сравнить экземпляры для равенства, то, именно это Вы делаете.

, Как упомянуто выше, необходимо знать о контракте с хэш-код , и точно так же не упускать глюки вокруг интерфейс Comparable - почти во всех ситуациях, которые Вы хотите , естественное упорядочивание , как определено Сопоставимым, чтобы быть согласовывающееся с равняется (см. документ BigDecimal api для канонического встречного примера)

Создание нового метода для решения равенства, вполне кроме не работы с существующими классами библиотеки, бросает вызов конвенции Java несколько.

0
ответ дан 30 November 2019 в 03:53
поделиться

Необходимо только должны быть переопределить equals() метод, если Вы хотите определенное поведение при добавлении объектов к отсортированным структурам данных (SortedSet и т.д.)

, Когда Вы делаете это, необходимо также переопределить hashCode().

См. здесь для полного объяснения.

0
ответ дан 30 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

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