检查子类时 "instanceOf" 出错
Error on "instanceOf" when checking a subClass
我有一个方法,它接受所有扩展 Persona.Class
的 class 作为参数(Uomo.Class
和 Donna.Class
扩展 Persona.Class
)。
public PersonaDecorator(Class <? extends Persona> persona) {
}
在这个方法里面,我需要知道发送给方法的class是Uomo.Class
还是Donna.Class
。
我以为我可以做这样的事情:
public PersonaDecorator(Class <? extends Persona> persona) {
if(persona instanceof Uomo){
......
}
}
但是我得到这个错误:Incompatible conditional operand types Class<capture#1-of ? extends Persona> and Uomo
谢谢
instanceof
运算符测试一个引用(左操作数)是否引用一个对象,该对象是在右操作数上命名的 class 的实例。
这里,persona
将是对 Class
实例的引用,而 Class
的实例永远不能是 Persona
的实例。你正在测试一个不可能的条件,编译器会帮助你告诉你这个错误。
我怀疑你想要Class.isAssignableFrom
:
if (Uomo.class.isAssignableFrom(persona))
那也会找到 Uomo
的子 classes。如果你想测试它是否 完全 和 Uomo
class,你可以使用:
if (persona == Uomo.class)
我有一个方法,它接受所有扩展 Persona.Class
的 class 作为参数(Uomo.Class
和 Donna.Class
扩展 Persona.Class
)。
public PersonaDecorator(Class <? extends Persona> persona) {
}
在这个方法里面,我需要知道发送给方法的class是Uomo.Class
还是Donna.Class
。
我以为我可以做这样的事情:
public PersonaDecorator(Class <? extends Persona> persona) {
if(persona instanceof Uomo){
......
}
}
但是我得到这个错误:Incompatible conditional operand types Class<capture#1-of ? extends Persona> and Uomo
谢谢
instanceof
运算符测试一个引用(左操作数)是否引用一个对象,该对象是在右操作数上命名的 class 的实例。
这里,persona
将是对 Class
实例的引用,而 Class
的实例永远不能是 Persona
的实例。你正在测试一个不可能的条件,编译器会帮助你告诉你这个错误。
我怀疑你想要Class.isAssignableFrom
:
if (Uomo.class.isAssignableFrom(persona))
那也会找到 Uomo
的子 classes。如果你想测试它是否 完全 和 Uomo
class,你可以使用:
if (persona == Uomo.class)