2010-08-31 10 views

Respuesta

20
Type type = bar.getClass().getGenericInterfaces()[0]; 

if (type instanceof ParameterizedType) { 
    Type actualType = ((ParameterizedType) type).getActualTypeArguments()[0]; 
    System.out.println(actualType); 
} 

Por supuesto, en el caso general, se debe iterar sobre la matriz, en lugar de asumir que tiene excatly un elemento ([0]). Con el ejemplo anterior, puede convertir actualType en java.lang.Class. En otros casos puede ser diferente (vea el comentario de meriton)

+3

Tenga en cuenta que, en general, 'actualType' no es necesariamente una llanura' java.lang.Class' - también podría ser una 'GenericArrayType', un' ParametrizedType', o una 'TypeVariable'. – meriton

+0

Es cierto. Quise decir que en su caso es 'Clase '. – Bozho

0

Si ya tiene Guava en el classpath, esto es un poco más robusto ya que especifica la interfaz/superclase por tipo en lugar de índice.

TypeToken<?> baz = TypeToken.of(Bar.class).resolveType(Foo.class.getTypeParameters()[0]); 
System.out.println(baz.getRawType()); // class Baz 
Cuestiones relacionadas