Dado que los genéricos solo se controlan durante el tiempo de compilación con Java 5, ¿pueden evitar ClassCastExceptions en todas las situaciones ?¿Los genéricos en Java evitan todas las ClassCastExceptins?
Respuesta
En primer lugar, debe asegurarse de que su código compila sin advertencias sueltas. Ese es un buen indicador. Para entender por qué, le sugiero que eche un vistazo al sample chapter for generics from Effective Java.
En segundo lugar, los genéricos no puede protegerse de código como:
public void methodOne(Integer argument) {
methodTwo(argument);
}
public void methodTwo(Object argument) {
System.out.println(((Date) argument).getTime());
}
tercer lugar, si usted es de alguna manera u otra clase de jugar con cargadoras, es posible obtener extraña ClassCastExceptions
, tal como en this discussion thread. Es adormecer la mente para ver
java.lang.ClassCastException: javax.mail.Session no se puede convertir a javax.mail.Session
Así que la respuesta es no, se puede' t deshacerse de ClassCastException
s solo mediante el uso adecuado de genéricos.
No. El uso de Java 5.0 y el tipo de genéricos no hace que ClassCastException-proof.
hay alguna manera de que ... –
Si no lo haces, no deberías ver ninguna ClassCastException. –
La garantía "de hierro fundido" que proporcionan los genéricos de Java 5 es que nunca verá una ClassCastException de los moldes insertados por el compilador provisto que la compilación no produjo advertencias "no verificadas".
En la vida real, a menudo no puede evitar las advertencias no verificadas si su código utiliza bibliotecas heredadas (no genéricas). Entonces, los moldes generados por el compilador pueden lanzar ClassCastException, y es su trabajo evitar esto asegurando que los valores devueltos por el código de la biblioteca estén bien tipados para sus declaraciones.
De lo contrario, la situación no ha cambiado. Fuera de los genéricos, si seleccionas un tipo incompatible obtendrás una ClassCastException de la misma manera que siempre lo hiciste.
(Una buena referencia para esta y otras preguntas genéricos es Java Generics and Collections.)
Nop. los genéricos solo te salvan de los errores de tiempo de compilación, no de las excepciones de tiempo de ejecución.
-1: ¿Qué es una excepción de tiempo de compilación? –
- 1. ¿Los acortadores de URL evitan las palabras feas?
- 2. Uso de los genéricos de Java en las interfaces de
- 3. genéricos en Java
- 4. valores de las enumeraciones de Java con los genéricos
- 5. ¿Cómo manejas los "súper" genéricos en java?
- 6. Java genéricos, genéricos extendidas y las clases abstractas
- 7. los genéricos de Java T vs Objeto
- 8. StructureMap registrar tipos genéricos contra todas las posibles implementaciones concretas
- 9. ¿Cómo evitan los servidores web TIME_WAIT?
- 10. Escriba alias para los genéricos de Java
- 11. Java genéricos
- 12. Generar todas las permutaciones en Java
- 13. Mudarse a los genéricos.
- 14. ¿Cómo se evitan las vulnerabilidades XSS en ASP.Net (MVC)?
- 15. Java Swing - Cómo manejar los genéricos en ActionListener
- 16. Java genéricos y varargs
- 17. Java: genéricos aceptar sólo los tipos de enumeración
- 18. genéricos de Java: ¿parámetros genéricos múltiples?
- 19. genéricos de Java de genéricos de
- 20. Genéricos Constructor predeterminado Java
- 21. Genéricos y clasificación en Java
- 22. genéricos de Java covarianza
- 23. Java genéricos vacíos
- 24. sobrecarga de métodos y argumentos con los genéricos en Java
- 25. Java genéricos y JNI
- 26. constructores genéricos java
- 27. Java: Instanceof y genéricos
- 28. Java: Eliminar todas las filas de DefaultTableModel
- 29. Java ¿cómo imprimir todas las variables locales?
- 30. Java genéricos + Generador patrón
+1 Para los getchas de ClassLoader – mtpettyp