2016-06-23 2 views
0

Я видел коллегу написать это следующим образом:Как переписать метод Equals

@Override 
public boolean equals(Object obj) { 
    if (this == obj) { 
     return true; 
    } 
    if (obj == null) { 
     return false; 
    } 
    if (getClass() != obj.getClass()) { 
     return false; 
    } 
    final ImageCode other = (ImageCode) obj; 
    if ((this.code == null) ? (other.code != null) : !this.code.equals(other.code)) { 
     return false; 
    } 
    return true; 
} 

Тогда я предложил изменить его для этого:

@Override 
public boolean equals(Object obj) { 
    if (this == obj) { 
     return true; 
    } 
    if (!(obj instanceof Parent)){ 
     return false; 
    } 
    final ImageCode other = (ImageCode) obj; 
    if ((this.code == null) ? (other.code != null) : !this.code.equals(other.code)) { 
     return false; 
    } 
    return true; 
} 

, но он сказал мне, что это неправильно, и что instanceof не может использоваться для метода equals. Я не понимаю, почему он это сказал.

+0

Не могу сказать. Вы пытались запустить ваш equals override с некоторыми линиями отладки? – Hooch

+1

Класс C расширяет B. И B расширяет A. Тогда объект c является экземпляром C (или B или A). Не означает, что c и b (или a) являются одним и тем же классом. – waltersu

+0

@ Hooch, @ waltersu, но я тестировал расширение, я не мог найти ошибки. – lucare

ответ

1

Вы можете использовать instanceof в equals. Java использует его все время. См. String

public boolean equals(Object anObject) { 
    if (this == anObject) { 
     return true; 
    } 
    if (anObject instanceof String) { 
     String anotherString = (String)anObject; 

     // More code ... 
     return true; 
    } 
    return false; 
} 
0

@dejvuth, Если anObject является экземпляр String, то почему мы должны типаж. Вы можете напрямую использовать его. Я думаю, что все в порядке, не проверяя instanceOf. Просто вам может понадобиться ввести листинг объекта. Здесь вы можете проверить мой код.

Смежные вопросы