Instanceof außerhalb der equals-Methode

Aus Programmieren-Wiki
🚧 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);
	}
}