Da Generika nur während der Kompilierzeit mit Java 5 überprüft werden, können sie ClassCastExceptions in allen Situationen vermeiden?Vermeiden Generika in Java alle ClassCastExceptins?
Antwort
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.
Nein. Die Verwendung von Java 5.0 und Generics-Typ macht Sie nicht ClassCastException-proof.
gibt es einen Weg für diese ... –
Wenn Sie überhaupt nicht werfen, sollten Sie keine ClassCastException sehen. –
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.)
Nope. Generika speichern nur Fehler bei der Kompilierung, nicht Laufzeitfehler.
-1: Was ist eine Ausnahme für die Kompilierungszeit? –
- 1. Alle Generika in C# (siehe Code)
- 2. Java-Generika und typecasting
- 3. Higher-kinded Generika in Java
- 4. mit Java Generika in Schnittstellen
- 5. Standardlistenmodell und Generika JAVA
- 6. Lambdas und Generika in Java 8
- 7. Java-Reflektion für Generika
- 8. Java: Experimentieren mit Generika
- 9. scala - Alle vs Strich in Generika
- 10. Shop Klasse Generika in Feld in Java
- 11. Infer Generika mit Schnittstelle - java
- 12. Was Java-Platzhalter in C# Generika entspricht
- 13. Unterschied zwischen diesen ‚Generika‘ Syntaxen in Java
- 14. Typ Sicherheit mit Generika in Java
- 15. Irgendein Wort zu vergifteten Generika in Java?
- 16. Ein seltsamer Fehler in Java Generika
- 17. Java - Umgang mit Generika mit Vererbung
- 18. Design Hilfe! Java-Generika in einem Enum Factory-Transformator!
- 19. Java-Grundlagen über Generika und Reflexion
- 20. Java-Generika und die addAll-Methode
- 21. Wie diese Verwendung von Java Generika
- 22. Java Generika - ein generisches zum anderen Casting
- 23. Java 8 Lambda Generika Komparator - Compiler-Warnungen
- 24. Java Raw Art und Generika Interaktion
- 25. Java - Generika & Wildcards & Schnittstelle versus Implementierung
- 26. Java 8 Generika und Typinferenz Ausgabe
- 27. Java-Generika mit Platzhaltern und statischen Wrappern
- 28. Java Generika doppelt verknüpfte Liste Swap
- 29. Java: Design mit Singletons und Generika
- 30. Java-Polymorphie: Wie kann ich Eingabeparameter für Typumwandlung vermeiden?
+1 Für die ClassLoader-Fehler – mtpettyp