interface Foo<T> { ... }
class Bar implements Foo<Baz> { ... }
我有一个Bar
对象。如何获取T
的价值(Baz
)?
到目前为止,我只设法获得界面和T
,但我看不到获得其价值的方法。
提前致谢。
答案 0 :(得分:20)
Type type = bar.getClass().getGenericInterfaces()[0];
if (type instanceof ParameterizedType) {
Type actualType = ((ParameterizedType) type).getActualTypeArguments()[0];
System.out.println(actualType);
}
当然,在一般情况下,你应该迭代数组,而不是假设它有一个元素([0]
)。通过上面的示例,您可以将actualType
投射到java.lang.Class
。在其他情况下,它可能会有所不同(请参阅meriton的评论)
答案 1 :(得分:0)
如果你已经在类路径上安装了Guava,那么当你按类型而不是索引指定接口/超类时,这会更加健壮。
TypeToken<?> baz = TypeToken.of(Bar.class).resolveType(Foo.class.getTypeParameters()[0]);
System.out.println(baz.getRawType()); // class Baz