yo esperaría que este código para lanzar una ClassCastException:¿Por qué no falla este elenco genérico?
public class Generics {
public static void main(String[] args) {
method(Integer.class);
}
public static <T> T method(Class<T> t) {
return (T) new String();
}
}
pero no es así. Fundición de cuerda a T no falla, hasta que yo utilizo el objeto devuelto de alguna manera, como:
public class Generics {
public static void main(String[] args) {
method(Integer.class).intValue();
}
public static <T> T method(Class<T> t) {
return (T) new String();
}
}
Antecedentes: He creado una clase que utiliza JAXB para deserializar un archivo XML. Se ve así:
public static <T> T unmarshal(File file, Class<? extends T> clazz)
Dependiendo de si la raíz-Element es un tipo anónimo o no, se devuelve T o JAXBElement. JAXBElement, por supuesto, no se puede convertir a T. En mi prueba de unidad, donde solo llamé a unmarshal() sin hacer algo con el resultado, todo funcionó bien. En el Código, falló.
¿Por qué no falla directamente? ¿Es esto un error? Si no, me gustaría entender por qué.
Bueno, * no * produce una advertencia. – Jeremy