java - 我可以使用 isAssignableFrom 来检查 Java 中 C1 是 C2 的子类型吗?

标签 java reflection

这是一个例子:

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 的答案并不总是正确的。这是一个正确的结论吗?有没有更好的方法来在运行时检查子类型?

谢谢。 ——愿望。

最佳答案

你被类型删除绊倒了isAssignableFrom方法对删除(原始)类型进行操作 I 。另一方面,编译器看到您尝试分配 I<Integer>I<String> ,并不允许分配。

您可以通过 getGenericInterfaces 确定实际实现的类型等等人。然后您可以检查返回的类型是否为 ParamterizedType 的实例。 ,并获取实际的类型绑定(bind)。

不过,通常情况下,这是很少有必要的。

关于java - 我可以使用 isAssignableFrom 来检查 Java 中 C1 是 C2 的子类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22881164/

相关文章:

golang递归反射

java - 检查这是什么java类类型

java - 如何在 Java 中使用原语避免 NoSuchMethodException

java - 日期对象比较 - Java

java - Gson 将 JSON 数组反序列化为对象

java - 如何修复错误 "Bad Operand Types for Binary Operator ' > =' first type: int[] second type int"

java - Infinispan:如何异步调用EntryProcessor?

java - 包含映射或简单类型的 JAXB 对象

java - 方法 'java.lang.reflect.Method.getDefaultValue()' 的效用?

快速反射 : how to construct a new struct instance based on reflections?