Frage

Da Generika werden nur während der Kompilierung mit Java 5 geprüft, können sie vermeiden Classcastexceptions in allen Situationen?

War es hilfreich?

Lösung

Zunächst einmal sollten Sie sicherstellen, dass Ihr Code ohne unckeched Warnungen kompiliert. Das ist ein guter Indikator. Um zu verstehen, warum, ich schlage vor, Sie auf der Beispielkapitel rel="nofollow .

Zweitens, Generika können Sie nicht schützen von Code wie:

public void methodOne(Integer argument)  {
     methodTwo(argument);
} 

public void methodTwo(Object argument) {
     System.out.println(((Date) argument).getTime());
}

Third allem, wenn Sie in eine oder andere Weise Messing mit Klasse Lader sind, könnten Sie seltsame ClassCastExceptions erhalten, wie in diese Diskussion . Es ist geisttötende zu sehen

  

java.lang.ClassCastException: javax.mail.Session kann nicht gegossen werden   javax.mail.Session

Die Antwort ist nein, können Sie von ClassCastExceptions bekommen nicht nur befreien, indem richtig Generika mit .

Andere Tipps

Die „Gusseisen“ Garantie, dass Java 5 Generika bietet, ist, dass Sie nie durch den Compiler eingefügt, um einen Classcast von den Abgüssen finden Sie unter zur Verfügung gestellt , die Zusammenstellung erzeugt keine „ungeprüft“ Warnungen.

Im wirklichen Leben kann man oft nicht unkontrolliert Warnungen vermeiden, wenn Ihr Code verwendet Legacy (non-generified) Bibliotheken. Dann werden die Compiler generierte Abgüsse können werfen Classcast, und es ist Ihre Aufgabe, dies zu verhindern, indem sichergestellt wird, dass die von Bibliothekscode zurückgegebenen Werte sind gut getippt für Ihre Erklärungen.

Ansonsten ist die Situation unverändert. Außerhalb von Generika, wenn Sie zu einem inkompatiblen Typ umgewandelt werden Sie eine Classcast die gleiche Art und Weise wie Sie es immer tat.

(Eine gute Referenz für diese und andere Generika Fragen Java Generics und Sammlungen .)

Nein. Mit Java 5.0 und Generika-Typ nicht Sie machen Classcastsicher.

Nein. Generika nur Sie von der Kompilierung Fehler speichern, keine Ausnahmen Laufzeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top