2009-08-30 10 views
11

estoy tratando de hacer algo como esto en Java:¿Hay alguna manera de encontrar el tipo de parámetro de plantilla (genérico) en Java?

public static <T> T foo() { 
    return (T) bar(T); 
} 

public static Object bar(Class<?> klaz) { 
    return klaz.newInstance(); 
} 

Pero el código no compila ya que no puedo sustituir T para una clase <>?.
Con una clase concreta, puedo llamar barra de como:

bar(ConcreteClass.class); 

Pero la misma no funciona para T. es decir, no hay tal cosa como T.class

En C#, typeof obras para ambos tipos de hormigón y de la plantilla. Por lo tanto, la llamada a la barra habría sido:

bar(typeof(T)); 

Pero no he podido encontrar nada similar en Java.

¿Me falta algo, o Java no tiene una forma de obtener el tipo de un parámetro de plantilla? Y si Java no tiene la instalación, ¿hay alguna solución alternativa?

Respuesta

14

No hay forma de obtener el tipo. Los genéricos de Java usan borrado de tipo por lo que incluso java no sabe qué es T en tiempo de ejecución.

En cuanto a las soluciones: puede definir foo para tomar un parámetro del tipo Class<T> y luego usar eso.

Cuestiones relacionadas