Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Некорректная имплементация equals() 
:(
    Опции темы
Royan
  Дата 17.10.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Есть класс
Код

public class Test {
    private String name;
    public Test(String name) {
        this.name = name;
    }
    public boolean equals(Test t) {
        return t.name.equals(this.name);
    }
}

У кого-нибудь есть идеи почему это некорректная имплементация equals? Подчеркну, что речь идет именно о реализации метода equals(), а не о том, что тут не переписан hashCode()


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Platon
Дата 17.10.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Код

public class Test {
    private String name;
    public Test(String name) {
        this.name = name;
    }


    public boolean equals(Object obj) {
        Test t = (Test)obj;
        return t.name.equals(this.name);
    }
}


Добавлено через 44 секунды
Ты, наверно, имел ввиду переопределение.
PM MAIL ICQ   Вверх
Royan
Дата 18.10.2007, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Верно сообразил. Молодец Platon +1 за внимательность.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Platon
Дата 18.10.2007, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Че-то седня ты целый день вопросами сыпешь ;) я так с тобой авторитетным челом стану
PM MAIL ICQ   Вверх
fixxer
Дата 18.10.2007, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(Platon @ 17.10.2007,  22:57)
Код

public class Test {
    private String name;
    public Test(String name) {
        this.name = name;
    }


    public boolean equals(Object obj) {
        Test t = (Test)obj;
        return t.name.equals(this.name);
    }
}


ClassCastException не боитесь поймать?
Код

public boolean equals(Object obj) {
        if (this == obj) return true;
        if (!(obj instanceof Test)) return false;
        Test t = (Test)obj;
        return t.name.equals(this.name);
}



--------------------
user posted image
PM MAIL ICQ   Вверх
Platon
Дата 18.10.2007, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



И правда что!! Приношу свои извинения, абсолютно правильная поправка.
PM MAIL ICQ   Вверх
Royan
Дата 18.10.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



fixxer, Да абсолютно верно это тоже надо учитывать.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
mindflyer
Дата 18.10.2007, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.10.2004
Где: Smolensk, Russia

Репутация: 1
Всего: 4



ClassCastException  уже боимся, надо бы ещё и NPE забояться в 
Код

t.name.equals(this.name)

smile

Код

if (t.name != null)
    return t.name.equals(this.name);
else 
    return this.name == null;



Это сообщение отредактировал(а) mindflyer - 18.10.2007, 10:16
PM MAIL ICQ   Вверх
Shaggie
Дата 18.10.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 4
Всего: 72



Ээй, хватит! Так вы на этом участке скоро и OutOfMemoryException перехватывать будете!

А Null успешно ловится на проверке instanceof, так что это, право, лишнее.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Royan
Дата 18.10.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Shaggie Справделивости ради OutOfMemoryError, а не exception... ну и я думаю никому не надо объяснять что error'ы никто не ловит, на то они и Error'ы


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Shaggie
Дата 18.10.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 4
Всего: 72



Не-а. Exception. И его можно перехватить и обработать. Столкнулся с ним при работе с картинками - распакованные в памяти jpeg занимают очень много места, стандартных 64 мегабайт кучи не хватает и вылетает Exception.

Вот что говорит гугл


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Royan
Дата 18.10.2007, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Shaggie, Еще разок в JavaAPI такого Exception'а нет, Он может появиться только если его кто то написал для своих никому неведомых целей, а гугл иногда говорит глупости


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Shaggie
Дата 18.10.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 4
Всего: 72



Так... а поиск по java.sun.com тоже глупости говорит?


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
chief39
Дата 18.10.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Гы smile Вспомнили таки о NPE smile)


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
mindflyer
Дата 18.10.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.10.2004
Где: Smolensk, Russia

Репутация: 1
Всего: 4



Цитата(Shaggie @  18.10.2007,  10:34 Найти цитируемый пост)
Ээй, хватит! Так вы на этом участке скоро и OutOfMemoryException перехватывать будете!
А Null успешно ловится на проверке instanceof, так что это, право, лишнее. 

В данном случае проверка необходима. instanceof делается для сравниваемого объекта, я же написал о равенству null поля объекта.
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.