以下是一个例子:
class test {
static interface I<A> { }
static class Y implements I<Integer> { }
public static void main(String[] args) {
// this is not allowed by the compiler:
//I<String> s = new Y() ;
// yet:
System.out.println(">" + I.class.isAssignableFrom(Y.class)) ; // true!
}
}
因此,我得出结论,isAssignable在答案中并不总是正确的。这是正确的结论吗?有没有更好的方法来检查运行时的子类型?
感谢。 --Wish。
答案 0 :(得分:1)
你被类型擦除绊倒了。 isAssignableFrom
方法对已擦除(原始)类型I
进行操作。另一方面,编译器会看到您尝试将I<Integer>
分配给I<String>
,并禁止分配。
您可以通过getGenericInterfaces等确定实际实施的类型。人。然后,您可以检查返回的类型是ParamterizedType
的实例,并获取实际的类型绑定。
通常,这很少是必要的。