我有以下接口/类结构:
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。 有没有办法做到这一点? 谢谢!
答案 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
它并不完全是我想要的,因为它不处理接口,而只是处理类。 无论如何,现在对我来说可能就足够了。