繁体   English   中英

instanceof似乎不起作用-我的代码有什么问题?

[英]instanceof doesn't seem to work - what's wrong with my code?

在继续我的上一个问题时 ,我正在尝试编写一个像这样的方法

public <T extends LivingThing> T getData(Class<T> clazz, Object otherParam) {
    if(clazz instanceof Cat) {
        //do something and return a new Cat
    }
}

我在if条件下收到编译器错误“不兼容的条件操作数类型”。 我究竟做错了什么? 如何检查方法中的类类型?

更新

好的,我进行了代码更改以使用isAssignableFrom方法。 这是一个新问题。

public <T extends LivingThing> List<T> getData(Class<T> classType) {
        LivingThingEnum livingThing = LivingThingEnum
                .getLivingThing(classType);
        if (livingThings.keySet().contains(livingThing))
            return livingThings.get(livingThing);
        return null;
    }
private Map<LivingThingEnum,List<? extends LivingThing>> livingThings;

这给了我一个类型不匹配! -“无法从列表转换为列表”。 T是否不应该扩展LivingThing,那么在这种情况下为什么编译器会抛出错误?

instanceof运算符适用于对象,而不适用于类。

例如,如果您具有变量obj ,则可以编写: obj instanceof Cat 在您的情况下,您需要检查以下内容: if (Cat.class.isAssignableFrom(clazz))

您的方法使用Class<T> clazz 而不是 LivingThing的实例。

将您的方法更改为:

public <T extends LivingThing> T getData(T livingThing, Object otherParam) {
    if(livingThing instanceof Cat) {
        //do something and return a new Cat
    }
}

或在Class上使用isAssignableFrom方法来测试Class而不是实例:

if(Cat.class.isAssignableFrom(clazz))

尝试使用Class#getName()

public static <T extends LivingThing> T getData(Class<T> clazz, Object otherParam) {
    if (Cat.class.getName().equals(clazz.getName())) {
        System.out.println("cat");
        // do something and return a new Cat
    }
    ...
}

或尝试使用Class#equals()

if (Cat.class.equals(clazz)) {..}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM