2009-08-14 9 views

Antwort

12

Zunächst sollten Sie sicherstellen, dass Ihr Code ohne unbeaufsichtigte Warnungen kompiliert. Das ist ein guter Indikator. Um zu verstehen, warum, schlage ich vor, Sie werfen einen Blick auf die sample chapter for generics from Effective Java.

Zweitens, Generika können Sie nicht aus dem Code schützen wie zum Beispiel:

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 ClassCastExceptions seltsam erhalten, wie in this discussion thread. Es ist

java.lang.ClassCastException zu sehen geisttötende: javax.mail.Session nicht javax.mail.Session gegossen werden kann

Die Antwort ist also Nein, Sie können‘ t ClassCastException s nur durch die ordnungsgemäße Verwendung von Generika loswerden.

+0

+1 Für die ClassLoader-Fehler – mtpettyp

2

Nein. Die Verwendung von Java 5.0 und Generics-Typ macht Sie nicht ClassCastException-proof.

+0

gibt es einen Weg für diese ... –

+1

Wenn Sie überhaupt nicht werfen, sollten Sie keine ClassCastException sehen. –

16

Die „Gusseisen“ Garantie, dass Java 5 Generika sieht vor, dass Sie nie bot eine Classcast von den Abgüssen eingefügt durch den Compiler sehen dass Kompilierung keine „ungeprüft“ Warnungen erzeugt.

Im echten Leben können Sie häufig nicht deaktivierte Warnungen vermeiden, wenn Ihr Code ältere (nicht generierte) Bibliotheken verwendet. Dann können die vom Compiler generierten Umwandlungen ClassCastException auslösen, und es ist Ihre Aufgabe, dies zu verhindern, indem Sie sicherstellen, dass die vom Bibliothekscode zurückgegebenen Werte für Ihre Deklarationen gut typisiert sind.

Ansonsten ist die Situation unverändert. Wenn Sie außerhalb von Generika in einen inkompatiblen Typ umwandeln, erhalten Sie eine ClassCastException auf die gleiche Weise wie zuvor.

(Eine gute Referenz für diese und andere Generika-Fragen ist Java Generics and Collections.)

-1

Nope. Generika speichern nur Fehler bei der Kompilierung, nicht Laufzeitfehler.

+0

-1: Was ist eine Ausnahme für die Kompilierungszeit? –