Pregunta

Dado que los genéricos sólo se verifican durante el tiempo de compilación con Java 5, se puede evitar que ClassCastExceptions en todo situaciones?

¿Fue útil?

Solución

En primer lugar, debe asegurarse de que el código se compila sin advertencias unckeched. Ese es un buen indicador. Para entender por qué, le sugiero que tome un vistazo a la de los genéricos de Java eficaz .

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());
}

En tercer lugar, si usted es de alguna manera u otra clase de jugar con cargadoras, es posible obtener extraña ClassCastExceptions, como en esta discusión hilo . Se aturden la mente para ver

  

java.lang.ClassCastException: javax.mail.Session no se puede convertir a   javax.mail.Session

Así que la respuesta es no, usted no puede deshacerse de ClassCastExceptions sólo mediante el uso de genéricos correctamente .

Otros consejos

La garantía de "hierro fundido" que Java 5 genéricos proporciona es que nunca se verá una ClassCastException de los moldes insertados por el compilador siempre que la compilación produce ninguna advertencia "sin marcar".

En la vida real, a menudo se pueden evitar las advertencias no sin marcar si su código utiliza las bibliotecas heredadas (no-generified). A continuación, los moldes generados por el compilador puede tirar ClassCastException, y es su trabajo para evitar que esto asegurando que los valores devueltos por código de la biblioteca están bien mecanografiados a para sus declaraciones.

De lo contrario la situación no ha cambiado. Fuera de los genéricos, si lanzas a un tipo incompatible obtendrá un ClassCastException la misma manera que siempre lo ha hecho.

(Una buena referencia para esta y otras preguntas genéricos es Java Genéricos y Colecciones .)

No. Uso de Java 5.0 y genéricos tipo no te hace ClassCastException a prueba.

Nop. genéricos sólo le salvará de errores tiempo de compilación, no en tiempo de ejecución excepciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top