Instanceof methode

forsti222

Mitglied
Leider habe ich schon wieder eine Frage :( schön langsam wird es mir direkt peinlich, aber ich hoffe ihr könnt mir helfen :)
Und zwar initialisiere ich 2 Bücher mit TITEL und ISBN. Und will dann überprüfen ob die ISBN gleich ist und somit 2 gleiche Bücher habe.
Habe es bis jetzt so
Java:
public boolean equals(Object a) {
	 return a instanceof this;
Book mybook = new Book ("titel", "3 8348 0963 6");
Book myOtherBook = new Book("Titel","3 8348 0963 6");
		System.out.println(myBook.equals(myOtherBook));
Dies funktioniert leider nicht so wie ich es will! Kann mir jemand einen Denkanstoss geben, wie das zu realisieren ist, dass ich die 2 ISBN nummern so vergleiche?

lg danke
 
Willst du nur die ISBN verlgeichen? Dann ruf von beiden Büchern die ISBN auf (getISBN() oder wie deine Methode heisst), dann hast du 2 Strings die du mit equals vergleichen kannst :)

Und dann aber nicht die equals methode überschreiben

Achja wegen instanceof
"The instanceof keyword can be used to test if an object is of a specified type."
siehe: http://www.java2s.com/Tutorial/Java/0060__Operators/TheinstanceofKeyword.htm
 
Zuletzt bearbeitet:
Hey,

Java:
public boolean equals(Object a) {
	 return a instanceof this;
Book mybook = new Book ("titel", "3 8348 0963 6");
Book myOtherBook = new Book("Titel","3 8348 0963 6");
		System.out.println(myBook.equals(myOtherBook));


Java:
public boolean equals(Object O){

if(o == null) return false;

if(o instanceof Book){

return (Book) o.getISBN().equals(getISBN());

}

return false;
}

Dieser Ansatz wäre schöner :)

Zuerst überprüfst du, ob das Objekt null ist, danach castest du es als/zum Buch/Book und kannst die Methoden aufrufen; anschließend prüfst du dies mit equals.

mfg
bo
 
Java:
public boolean equals(Object O){
if(!(o instanceof Book)){
    return false;
}
Book buch2 =(Book) o;
return this.isbn.equals(buch2.isbn);
}

Mein Ansatz dazu.
Der Null-Check ist unnötig, da bei einem instanceOf ein Null-check implizit dabei ist. Dann returne ich sofort, wenn es nicht passt.
Da wir hier in einer equals-Methode sind sollte man direkt auf die Member-Variablen zugreifen können, ist das nicht der Fall muss man doch auf die getter zurückgreifen oder die Variablen protected deklarieren.

"instanceOf" prüft, ob die Variable eine Instanz der gegeben Klasse ist. Daher ob man es unbedenklich casten kann(im Regelfall).
 
Zuletzt bearbeitet:
Das instanceof zu nutzen ergibt abr nur Sinn, wenn es so in der Aufgabe gefragt ist, bzw wenn spaeter noch andere Sachen wie DVD oder CD dazukommen die keine ISBN haben und du sie somit nicht per ISBN sondern mit anderen Sachen vergleichen musst.
Ansonsten wuerde doch ein normales
Java:
mybook.getISBN().equals(myOtherBook.getISBN());
reichen
 
Hey,

In deinem Beispiel fehlt aber noch der Caste, da du ansonsten nicht die Methoden aufrufen kannst.
Zudem musst du meiner Meinung nach überprüfen, ob es sich um ein null-Objekt handelt, da du ja ansonsten eine NullPointer bekommst.

@Anime-Otaku: Danke für den Tipp - wusste ich noch nicht :)

mfg
bo
 
Java:
Book mybook = new Book ("titel", "3 8348 0963 6");
Book myOtherBook = new Book("Titel","3 8348 0963 6");
if(mybook != null && myOtherBook != null)
    System.out.println(mybook.getISBN().equals(myOtherBook.getISBN());
wieso irgendwas casten, wenn es schon Objekte vom Typ Book sind?
 
Würdest du nicht die equals -Methode überschreiben wollen?
Ist doch sinnvoller, oder nicht?
 
Ne wuerd ich net. Dann muesste ich wieder casten. Was aber in diesem Fall (da es ja nur Buecher gibt) unnuetz ist?
Evtl wuerd ich ne eigene methode schrieben wo man 2 Buecher mitgeben kann die verglichen werden.
 
Zurück