检查泛型类是否是抽象类的实例


public static void main(String[] args)
{
Class b = B.class;
System.out.println(b.isAssignableFrom(A.class));
}
static abstract class A{
}
static class B extends A{
}

输出:

false

输出是错误的,我尝试使用实例,它有编译错误,请帮助

编辑已解决,您需要比较 baseclass 可以从扩展中分配 非常愚蠢,你不能使用 无论如何都是抽象的类实例

你的类B是从A扩展的,而不是相反。想象一个更具体的例子,比如

public abstract class Animal { ... }
public class Dog extends Animal { ... }
public class Cat extends Animal { ... }

B.class.isAssignableFrom(A.class)的结果是正确的false,因为你在问

我可以将Animal(A)分配给Dog(B)吗?

这通常是不可能的,因为可以有不同的动物,例如Cat

Animal animal = new Cat();
Dog dog = (Dog) animal; // Will not work since animal is a cat

有关更多详细信息,请参阅该方法的文档:

确定 Class 对象表示的类或接口

是否指定的 Class 参数表示的类或接口相同,或者是该类或接口的超超接口。如果是这样,它将返回true;否则返回false.如果此 Class 对象表示基元类型,则此方法返回true指定的 Class 参数是否正是此 Class 对象;否则返回false.

具体而言,此方法测试指定的 Class 参数表示的类型是否可以通过标识转换或通过扩大引用转换转换为此 Class 对象表示的类型。有关详细信息,请参阅 Java 语言规范第 5.1.1 和 5.1.4 节。

最新更新