2009-08-14 6 views

Respuesta

12

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.

+0

+1 Para los getchas de ClassLoader – mtpettyp

2

No. El uso de Java 5.0 y el tipo de genéricos no hace que ClassCastException-proof.

+0

hay alguna manera de que ... –

+1

Si no lo haces, no deberías ver ninguna ClassCastException. –

16

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.)

-1

Nop. los genéricos solo te salvan de los errores de tiempo de compilación, no de las excepciones de tiempo de ejecución.

+0

-1: ¿Qué es una excepción de tiempo de compilación? –