interface Foo { ... }
class Bar implements Foo { ... }
I\'ve got a Bar
object. How to get the value of T
If you already have Guava on the classpath, this is a bit more robust as you specify the interface/superclass by type rather than index.
TypeToken<?> baz = TypeToken.of(Bar.class).resolveType(Foo.class.getTypeParameters()[0]);
System.out.println(baz.getRawType()); // class Baz
Type type = bar.getClass().getGenericInterfaces()[0];
if (type instanceof ParameterizedType) {
Type actualType = ((ParameterizedType) type).getActualTypeArguments()[0];
System.out.println(actualType);
}
Of course, in the general case, you should iterate over the array, rather than assuming it has excatly one element ([0]
). With the above example, you can cast actualType
to java.lang.Class
. In other cases it may be different (see comment by meriton)