2016-06-23 6 views
0

ich einen Kollegen sah neu zu schreiben, schreiben sie wie folgt:Wie die Methode 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; 
} 

Dann schlug ich es für diese Veränderung:

@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; 
} 

aber er sagte mir, dass es falsch ist, und dass instanceof nicht für die equals Methode verwendet werden kann. Ich verstehe nicht, warum er das gesagt hat.

+0

Kann nicht sagen. Haben Sie versucht, Ihre Equals-Überschreibung mit einigen Debug-Zeilen auszuführen? – Hooch

+1

Klasse C erweitert B. Und B erweitert A. Dann Objekt c ist Instanz von C (oder B oder A). Bedeutet nicht, dass c und b (oder a) dieselbe Klasse ist. – waltersu

+0

@ Hooch, @ Waltersu, aber ich habe für die Erweiterung getestet, ich konnte keinen Fehler finden. – lucare

Antwort

1

Sie können instanceof in equals verwenden. Java benutzt es die ganze Zeit. Siehe z.B. 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; 
}