Ponieważ generyczne są sprawdzane tylko podczas kompilacji z Javą 5, czy mogą uniknąć wyjątków ClassCastExceptions we wszystkich sytuacjach ?Czy generics w Javie omija wszystkie ClassCastExceptins?
Odpowiedz
Przede wszystkim upewnij się, że Twój kod kompiluje się bez niepotwierdzonych ostrzeżeń. To dobry wskaźnik. Aby zrozumieć, dlaczego, proponuję spojrzeć na sample chapter for generics from Effective Java.
drugie, leki generyczne nie mogą ustrzec się od kodu, takich jak:
public void methodOne(Integer argument) {
methodTwo(argument);
}
public void methodTwo(Object argument) {
System.out.println(((Date) argument).getTime());
}
trzecia wszystkich, jeśli jesteś w jakiś sposób lub inny brudząc z klasy ładowarki, można dostać dziwne ClassCastExceptions
, tak jak w this discussion thread. To umysł paraliżujący zobaczyć
java.lang.ClassCastException: javax.mail.Session nie mogą być oddane do javax.mail.Session
Więc odpowiedź brzmi nie, można” t pozbyć się ClassCastException
s tylko przez prawidłowo przy użyciu generics.
Nie. Używanie Java 5.0 i typów generycznych nie powoduje, że ClassCastException jest odporny na błędy.
jest jakiś sposób na to ... –
Jeśli w ogóle nie rzucasz, nie powinieneś widzieć żadnego wyjątku ClassCastException. –
W „żeliwny” gwarancji, że Java 5 rodzajowych zapewnia, że nigdy nie zobaczysz ClassCastException z odlewów wstawionych przez kompilator warunkiem że kompilacja produkowane nie „niesprawdzony” ostrzeżenia.
W rzeczywistości często nie można uniknąć niezaznaczonych ostrzeżeń, jeśli twój kod używa starszych (nie generowanych) bibliotek. Następnie wygenerowane przez kompilator rzutnie mogą rzucić ClassCastException, a Twoim zadaniem jest zapobiec temu, zapewniając, że wartości zwrócone przez kod biblioteki są dobrze wpisane dla deklaracji.
W przeciwnym razie sytuacja nie ulegnie zmianie. Poza typami generycznymi, jeśli rzutujesz na niekompatybilny typ, otrzymasz wyjątek ClassCastException w taki sam sposób, jak zawsze.
(dobrym przykładem na to i inne pytania leków generycznych jest Java Generics and Collections.)
Nie. tylko generics pozwalają ci zaoszczędzić na błędach podczas kompilacji, a nie na wyjątkach w czasie wykonywania.
-1: Co to jest wyjątek czasu kompilacji? –
- 1. implements vs extends in generics w Javie
- 2. Czy to jest ograniczenie z generics w Javie?
- 3. Dlaczego generics drugiego poziomu nie jest możliwy w Javie
- 4. Dlaczego generics w Javie? Czym różni się od przeciążania?
- 5. JSON i Generics w Javie - ostrzeżenie o typie bezpieczeństwa
- 6. usunąć wszystkie znaki specjalne w Javie
- 7. Jak uzyskać wszystkie wartości wyliczeniowe w Javie?
- 8. Ternary wyrażenie niekiedy omija kontrole kompilatora walidacji
- 9. Generics w TypeScript
- 10. Generics eksportu w MEF
- 11. Czy generics w D2009 można wykorzystywać w dużych projektach?
- 12. Java Generics Wildcard vs użytkowania Wpisywane Generics
- 13. Generics w nadpisanych metodach
- 14. Czy dynamiczne używanie Generics jest niemożliwe?
- 15. Generics Java - czy można ograniczyć Serializowalność T?
- 16. C# Generics
- 17. Generics kotlin
- 18. EclipseLink @MappedSuperclass i generics
- 19. Generics Puzzler
- 20. Polimorficzne wysyłanie w Javie
- 21. C# generics z interfejsami
- 22. Ograniczenia w implementacji interfejsu w Javie
- 23. Wymuś java, aby zwolnić wszystkie blokady plików/uchwyty w Javie
- 24. Generics w dokumentacji XML wydanie
- 25. W Javie, co może zrobić dzika karta, którą zwykli generics nie mogą zrobić?
- 26. Analiza kodu bajtowego w Javie
- 27. Generics Java - zdobyć klasę?
- 28. nameof z generics
- 29. Jak usunąć wszystkie komponenty z JFrame w Javie?
- 30. Jak dodać wszystkie elementy tablicy String do wektora w Javie?
+1 Dla klas ClassLoadera – mtpettyp