Poiché i controlli generici vengono controllati solo durante la compilazione con Java 5, possono evitare ClassCastExceptions in tutte le situazioni ?I generici in Java evitano tutti ClassCastExceptins?
risposta
Prima di tutto, è necessario assicurarsi che il codice venga compilato senza avvisi unckeched. Questo è un buon indicatore. Per capire perché, ti suggerisco di dare un'occhiata allo sample chapter for generics from Effective Java.
secondo luogo di tutti, i generici non si può proteggere dal codice come:
public void methodOne(Integer argument) {
methodTwo(argument);
}
public void methodTwo(Object argument) {
System.out.println(((Date) argument).getTime());
}
terzo di tutti, se siete in un modo o nell'altro scherzi con classe Pale, si potrebbe ottenere strano ClassCastExceptions
, come in this discussion thread. E 'da capogiro per vedere
java.lang.ClassCastException: javax.mail.Session non può essere lanciato a javax.mail.Session
Quindi la risposta è no , si puo' t sbarazzarsi di ClassCastException
s usando correttamente i generici.
No. L'utilizzo di Java 5.0 e del tipo generico non rende ClassCastException-proof.
c'è un modo per quello ... –
Se non si esegue il cast, non si dovrebbe vedere alcuna ClassCastException. –
Il "ghisa" garantisce che Java 5 fornisce generici è che non si vedrà mai un ClassCastException dai cast inseriti dal compilatore fornito che la compilazione non ha prodotto avvisi "non controllati".
Nella vita reale, spesso non è possibile evitare avvisi non verificati se il proprio codice utilizza librerie legacy (non generati). Quindi il cast generato dal compilatore può lanciare ClassCastException ed è il tuo lavoro impedire ciò assicurando che i valori restituiti dal codice della libreria siano ben tipizzati per le dichiarazioni.
Altrimenti la situazione è invariata. Al di fuori dei generici, se lanci su un tipo incompatibile otterrai una ClassCastException nello stesso modo che hai sempre fatto.
(un buon riferimento per questa e altre domande di farmaci generici è Java Generics and Collections.)
Nope. i generici salvano solo da errori di compilazione, non da eccezioni di runtime.
-1: cos'è un'eccezione di compilazione? –
- 1. Java: Sperimentare con i generici
- 2. Catturare i caratteri jolly in Java generici
- 3. valori Java enumerazioni con i generici
- 4. Generici Java: più parametri generici?
- 5. Guice: come legare i generici per TUTTI i tipi?
- 6. Generici Java
- 7. java generici costruttori
- 8. Confuso da generici in Java
- 9. evitano con memcpy
- 10. Java - Metodi statici generici
- 11. Come posso trasmettere una lista usando i generici in Java?
- 12. Come restituire un numero utilizzando i generici in Java?
- 13. Parametrizzazione facoltativa in Java con generici
- 14. Campi generici Java
- 15. generici Java e Serializable
- 16. rimuovere tutti i caratteri speciali in java
- 17. Rimuovi tutti i commenti in file Java
- 18. Java Play2 - Modelli generici?
- 19. Generici Java: ottieni lezione?
- 20. Bug generici Java?
- 21. Generici Java + Pattern builder
- 22. Invocazione Java metodi generici
- 23. generici Java - tipo dedurre
- 24. Ereditato alcuni generici Java errati
- 25. Creazione di lambda generici in Java
- 26. Informazioni sui metodi generici java
- 27. realizzazione evitano di un metodo che è lì in interfaccia - java
- 28. Classi incompatibili di generici java
- 29. Parametri limitati Java in metodi generici
- 30. Uso generici Java nelle interfacce
+1 Per i getchas di ClassLoader – mtpettyp