2012-01-06 14 views
5

El parámetro es ArrayList <T> cómo puedo obtener className del TEl parámetro es ArrayList <T> y cómo puedo obtener className del T

public static <T extends Object> void test(ArrayList<T> list){ 
     T temp; 
     Class classType=temp.getClass(); 
     System.out.println(classType.getName()); 
} 

Se pudo compilar eso: temp variable local no puede tener sido inicializado

Pero, ¿cómo puedo obtener el className de la clase de la plantilla?

Respuesta

6

No se puede obtener el tipo genérico. Esto se debe a la forma en que se implementan los genéricos en Java (utilizando borrado de tipo). Básicamente, solo puede usar genéricos para detectar errores de tipo en tiempo de compilación.

Su código no se puede compilar, porque está tratando de llamar al getClass en una variable local que no se ha inicializado.

Lo que podría hacer en su lugar es:

  • pase en un parámetro Class<T> además de la lista para contar el método sobre el tipo que se utilizará
  • o buscar en el primer elemento de la lista (si está presente) y confíe en que su tipo de tiempo de ejecución es lo suficientemente representativo (que no)
4

No se puede, debido a la supresión del tipo en la implementación de los genéricos de Java. Cuando lo que necesita saber la clase, el típico truco es pasar la clase como un parámetro separado llamado "tipo de token", así:

public static <T extends Object> void test(ArrayList<T> list, Class<T> classType) { 
} 

Este truco se discute con cierto detalle en el tutorial on Java generics (véase la parte inferior de la página para un ejemplo).

1

Puede probar este trabajo en torno a:

public static <T extends Object> void test(ArrayList<T> list){ 
     if(null!=list && !list.isEmpty())   
       System.out.println(list.get(0).getClass().getName()); 
} 
+1

esto no funciona si (1) la lista está vacía (aunque entubados salir para que no se desplome, sigue sin resolver la tarea), (2) el primer elemento es nulo, o (3) la clase del primer elemento es en realidad una subclase de T, que le dará la respuesta incorrecta – newacct

Cuestiones relacionadas