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

时间:2018-03-05 20:19:46

标签: java class abstract instanceof

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

输出为false我尝试使用instanceof并且它有编译错误请帮助

编辑解决了你需要比较基类可以从扩展漂亮的傻瓜中分配你不能使用的是类的抽象反正

1 个答案:

答案 0 :(得分:2)

您的班级BA延伸,而不是相反。想象一个更具体的例子,如

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

由于您要求

B.class.isAssignableFrom(A.class)的结果正确false
  

我可以将AnimalA)分配给DogB)吗?

一般情况下这是不可能的,因为可能有Cat等不同的动物。

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

有关详细信息,请参阅方法的documentation

  

确定此Class对象所代表的类或接口是相同,还是超类超接口,由指定的Class参数表示的类或接口。如果是,它返回true;否则返回false。如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回false

     

具体来说,此方法测试是否可以通过身份转换<将此类对象所代表的类型转换为 测试 / strong>或通过扩展参考转化。有关详细信息,请参阅Java语言规范,5.1.15.1.4部分。