Teniendo en cuenta este código:¿Existe alguna manera clara de asignar la clase de un tipo genérico a una variable?
List<Integer> ints = new ArrayList<Integer>();
// Type mismatch:
// cannot convert from Class<capture#1-of ? extends List> to Class<List<Integer>>
Class<List<Integer>> typeTry1 = ints.getClass();
// Type safety:
// Unchecked cast from Class<capture#2-of ? extends List> to Class<List<Integer>>
Class<List<Integer>> typeTry2 = (Class<List<Integer>>) ints.getClass();
// List is a raw type. References to generic type List<E> should be parameterized
Class<? extends List> typeTry3 = ints.getClass();
¿Hay una manera de conseguir la Class
de un List<Integer>
sin un error o una advertencia? Puedo suprimir las advertencias con la suficiente facilidad, pero si Java requiere que suprima una advertencia para este código válido, soy muy disappoint.
Por otro lado, si la supresión de advertencia es la única manera, ¿cuál es el más seguro para suprimir?
Aparentemente, no hay advertencia de forma gratuita debido a la eliminación. http://stackoverflow.com/questions/339699/java-generics-type-erasure-when-and-what-happens – user845279
No tiene sentido utilizar un tipo genérico concreto para la referencia de objeto de clase, porque esa información no es allí en el objeto que se hace referencia, por lo que en mi opinión 'Clase extiende List> 'o' Class extends List >> 'son los mejores tipos para la variable. Sin embargo, me sorprendió que no pudiera encontrar un lanzamiento sin advertencia para el tipo de objetivo comodín ...Sin embargo, como los objetos de clase se usan principalmente para la reflexión de todos modos, puede estar bien usando 'Clase >', que funciona sin advertencias –