" instanceOf"出错检查子类时

时间:2015-11-24 07:11:11

标签: java extends instanceof

我有一个方法,它接受所有扩展Persona.ClassUomo.ClassDonna.Class扩展Persona.Class)的类作为参数。

public PersonaDecorator(Class <? extends Persona> persona) {            
    }    

在此方法中,我需要知道发送给该方法的类是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

谢谢

1 个答案:

答案 0 :(得分:5)

instanceof运算符测试引用(左操作数)是否引用作为右操作数上命名的类的实例的对象。

此处,persona将是Class实例的引用,而Class的实例永远不会是Persona的实例。您正在测试一个不可能的条件,编译器会帮助您告诉您这个错误。

我怀疑你想要Class.isAssignableFrom

if (Uomo.class.isAssignableFrom(persona))

那也会找到Uomo的子类。如果您想测试它是否完全 Uomo类,您可以使用:

if (persona == Uomo.class)