使用反射获取“超级超级”类或接口的实际泛型类型

时间:2016-01-04 13:13:14

标签: java reflection

我有以下接口/类结构:

public interface IConverter<I, O> {    
    O convert(I value);
}
class ToViewConverter<I, O> implements IConverter<I, O>;
class NameToViewConverter<O> extends ToViewConverter<String, O>;
class RoleNameToViewConverter extends NameToViewConverter<Integer>;

我希望在运行时使用refelection获取ACTUAL类型和(来自IConverter)。 对于RoleNameToViewConverter的示例,我想分别获取String和Integer。 有没有办法做到这一点? 谢谢!

2 个答案:

答案 0 :(得分:0)

有一些方法可以做到这一点,虽然它不是很好:

RoleNameToViewConverter foo = new RoleNameToViewConverter();
System.out.println(foo.getClass().getGenericSuperclass());
System.out.println(foo.getClass().getSuperclass().getGenericSuperclass());

这将打印:

NameToViewConverter<java.lang.Integer>
ToViewConverter<java.lang.String, O>

在第一行中,您可以获得Integer,在第二行之外,您可以获得String

答案 1 :(得分:0)

我发现此文档非常有用:

http://www.javacodegeeks.com/2013/12/advanced-java-generics-retreiving-generic-type-arguments.html

它并不完全是我想要的,因为它不处理接口,而只是处理类。 无论如何,现在对我来说可能就足够了。