2010-06-13 13 views
7

que tienen la clase siguienteObteniendo el tipo de parámetro de clase parametrizado?

public class MyClass<T> { 
    public Class<T> getDomainClass() { 
      GET THE CLASS OF T 
    } 
} 

He buscado en Google este problema y todas las respuestas que pude me encuentran contadas a utilizar getGenericSuperClass(), pero el problema de este método es que debo tener una segunda clase que extiende MyClass y no quiero hacer esto. Lo que necesito es obtener el tipo parametrizado de una clase concreta?

+0

¿Vio: http://stackoverflow.com/questions/1901164/get-type-of-a-generic-parameter-in-java-with-reflection? – Campa

Respuesta

5

No puede. La información que desea (es decir, el valor de T) no está disponible en tiempo de ejecución debido al borrado de tipo.

0

Si necesita saber el tipo, es probable que no deba usar genéricos.

3

Debido al borrado de tipo, la única manera de obtenerlo es si se pasa como un parámetro explícito, ya sea en un método o en el constructor.

public class MyClass<T> { 
    public Class<T> getDomainClass(Class<T> theClass) { 
      // use theClass 
    } 
} 
3

La única forma que conozco:

public class MyClass<T> { 

    private Class<T> clazz; 

    public MyClass(Class<T> clazz) { 
     this.clazz = clazz; 
    } 

    public Class<T> getDomainClass() { 
     return clazz; 
    } 
} 

Así que, básicamente, proporciona el tiempo de ejecución de la información, que no tiene del compilador.

1

¡Puedes hacerlo si quieres obtener un tipo genérico que heredes! ¡Agregue este método a su clase y obtenga ganancias! ;)

public Class<?> getGenericType() { 
    Class result = null; 
    Type type = this.getClass().getGenericSuperclass(); 

    if (type instanceof ParameterizedType) { 
     ParameterizedType pt = (ParameterizedType) type; 
     Type[] fieldArgTypes = pt.getActualTypeArguments(); 
     result = (Class) fieldArgTypes[0]; 
    } 

    return result; 
} 
Cuestiones relacionadas