Instanceof außerhalb der equals-Methode: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „{{Bewertungsrichtlinie |baustelle=Ja |blatt=1 |schweregrad=leicht |weiterlesen=Nein }}“) |
Keine Bearbeitungszusammenfassung |
||
Zeile 2: | Zeile 2: | ||
|baustelle=Ja | |baustelle=Ja | ||
|blatt=1 | |blatt=1 | ||
|beschreibung=Die JavaAPI bietet uns das Schlüsselwort <syntaxhighlight inline lang="Java">instanceOf</syntaxhighlight> um zu prüfen ob eine Objekt eine Instanz einer bestimmten Schnittstelle (Interface) oder Klasse ist. | |||
In diesem Übungsbetrieb ist die Verwendung von instanceOf bis auf eine Ausnahme verboten. | |||
Besagte Ausnahme wird dadurch gebildet, dass es durchaus vorteilhaft sein kann die [https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object- equals(Object o)] Methode einer Klasse zu überschreiben. In dieser muss natürlich zunächst geprüft werden, ob das übergebene Objekt auch wirklich eine Instanz dieser Klasse ist. | |||
|schweregrad=leicht | |schweregrad=leicht | ||
|negativ=Mit instanceOf können wir natürlich auch außerhalb der besagten equals Methode Vergleiche aufstellen. Jedoch ist das in vielen Fällen eine sehr unsaubere Lösung für ein Problem: | |||
<syntaxhighlight lang="Java"> | |||
public void talk(Person[] persons) { | |||
for (Person person : persons) { | |||
if (person instanceOf InfoStudent) { | |||
System.out.println("Ich studiere Informatik..."); | |||
} else if (person instanceOf Employee) { | |||
System.out.println("Ich arbeite in der Indusrie..."); | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
Es ist hier eine viel bessere Lösung, in der Klasse Person eine abstrakte Methode zu definieren, die einen String zurück- oder ausgibt. Diese Methode sollte dann von der Employee und InfoStudent Klasse geerbt und implementiert werden. | |||
|positiv=<syntaxhighlight lang="Java"> | |||
class Book { | |||
[...] | |||
@Override | |||
public boolean equals(Object obj) { | |||
// This will also do an implicit null-check so we don't have to worry about that here | |||
return (obj instanceOf this); | |||
} | |||
} | |||
</syntaxhighlight> | |||
|weiterlesen=Nein | |weiterlesen=Nein | ||
}} | }} |
Version vom 6. Mai 2024, 08:47 Uhr
🚧 | Diese Seite befindet sich in Bearbeitung | 🚧 |
🤓 | Diese Seite ist eine Bewertungsrichtlinie, die ab Blatt 1 annotiert und ab Blatt 2 abgezogen wird. | 🤓 |
Beschreibung
Die JavaAPI bietet uns das Schlüsselwort instanceOf
um zu prüfen ob eine Objekt eine Instanz einer bestimmten Schnittstelle (Interface) oder Klasse ist.
In diesem Übungsbetrieb ist die Verwendung von instanceOf bis auf eine Ausnahme verboten.
Besagte Ausnahme wird dadurch gebildet, dass es durchaus vorteilhaft sein kann die equals(Object o) Methode einer Klasse zu überschreiben. In dieser muss natürlich zunächst geprüft werden, ob das übergebene Objekt auch wirklich eine Instanz dieser Klasse ist.
Negativbeispiel
Mit instanceOf können wir natürlich auch außerhalb der besagten equals Methode Vergleiche aufstellen. Jedoch ist das in vielen Fällen eine sehr unsaubere Lösung für ein Problem:
public void talk(Person[] persons) {
for (Person person : persons) {
if (person instanceOf InfoStudent) {
System.out.println("Ich studiere Informatik...");
} else if (person instanceOf Employee) {
System.out.println("Ich arbeite in der Indusrie...");
}
}
}
Es ist hier eine viel bessere Lösung, in der Klasse Person eine abstrakte Methode zu definieren, die einen String zurück- oder ausgibt. Diese Methode sollte dann von der Employee und InfoStudent Klasse geerbt und implementiert werden.
Positivbeispiel
class Book {
[...]
@Override
public boolean equals(Object obj) {
// This will also do an implicit null-check so we don't have to worry about that here
return (obj instanceOf this);
}
}