Gefahrlose Typumwandlung

Posted September 9, 2007

Wenn aus irgendeinen Grund der Typ eines Objekts zu 'schwach' ist, weil beispielsweise aus einem einfachen Cache ein Objekt geholt wurde, dann ist es oft nötig, das man eine Klassenzugehörigkeit explizit hinzufügt durch eine Typumwandlung - einen so genannten Typecast.

Person p = (Person)cache.getSavedObject();

Typecasts sollten nur im Notfall eingesetzt werden, da bei einer strengen und konsequenten Verwendung von Typen gar keine Typecasts gebraucht werden und somit gar keine Gefahr für derartige Laufzeitfehler entsteht.

Wenn man dann aber doch einen Typecasts braucht, dann sollte man eine ClassCastException abfangen, oder aber vorher den Typ abfragen und bei ungültigen Casts dann null zurückgeben..

Object o = cache.getSavedObject(); 
Person p = null;
if (o instanceof Person) {
    p = (Person)o;
}

Das geht zwar auch in C#, doch da gibt es sogar noch einen viel einfacheren Weg, der exakt dasselbe leistet:

Person p = cache.getSavedObject() as Person; 

(originally posted on 2007-09-10)