Cast außerhalb der equals-Methode

Aus Programmieren-Wiki
🚧 Diese Seite befindet sich in Bearbeitung 🚧
🤓 Diese Seite ist eine Bewertungsrichtlinie, die ab Blatt 3 annotiert und ab Blatt 4 abgezogen wird. 🤓

Beschreibung

Das Anti-Pattern "Unsafe Cast" bezieht sich auf eine Situation, in der in Java ein unsicherer Typ-Cast durchgeführt wird. In Programmieren darf ein Cast nur als Teil des equals-Mechanismus verwendet werden.

Das tritt auf, wenn ein Entwickler versucht, eine Referenz von einem allgemeinen Typ zu einem spezifischen Typ umzuwandeln, ohne die Typsicherheit zu überprüfen.

Ein unsicherer Typ-Cast kann zu Laufzeitfehlern führen, wenn die Referenz tatsächlich nicht mit dem angegebenen Typ kompatibel ist. Dadurch können ClassCastException-Fehler auftreten, die das Programm zum Absturz bringen oder zu unerwartetem Verhalten führen können-


Negativbeispiel

Gehen wir davon aus, dass wir uns in einer Klasse "Cat" befinden:

public boolean equals(Object object) {
    Cat other = (Cat) object;

    // The rest of the criteria for an object to be equal
}

In diesem Fall wird ein Objekt, dessen Typ nicht bekannt ist aber erwartet wird, dass er ebenfalls Cat ist, gecastet. Da allerdings nicht vorher geprüft wird, kann es sein, dass object tatsächlich nicht vom Typ Cat ist und demnach bei diesem Cast einen Fehler erzeugt.

Bei einem unsicheren Cast wird eine Warnung vor einem ungeprüften Cast angezeigt, da der genauer Typ von object zur Kompilierungszeit nicht bekannt ist.

Um das Anti-Pattern "Unsafe Cast" zu vermeiden, ist es wichtig, sicerzustellen, dass der Typ-Cast sicher ist, indem vor dem Cast der Typ überprüft wird.

Positivbeispiel

Die Klasse "Cat" aus vorherigem Beispiel:

public boolean equals(Object object) {
    if (object == null) {
        return false;
    }

    if (object.getClass() != this.getClass()) {
        return false;
    }

    Cat other = (Cat) object;

    // The rest of the criteria for an object to be equal
}

Hier wird der Cast durch Guard-Clauses gesichert. Es wird zunächst überprüft ob das übergebene Objekt kompatibel ist, also auch vom Typ Cat. Ist dem nicht so, wird durch ein "early-return" Statement verhindert, dass der folgende Cast zu einem Fehler führen kann.

Ist object allerdings vom Typ Cat, ist der Cast sicher. Wir haben ja bereits festgestellt, dass die Typen kompatibel in einem Cast sind.


Wenn du diese Seite interessant fandest, findest du hier noch mehr Seite(n) dazu:
Datentypen