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

标签 java instanceof

继续我之前的 question ,我正在尝试编写一个这样的方法

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))

关于java - instanceof 似乎不起作用 - 我的代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23322239/

相关文章:

javascript - instanceof 在 javascript 中的奇怪输出

Java:Instanceof 和泛型

java - DeviceDriver 连接语句未执行

java - Guava ImmutableSet.copyOf() 线程安全吗?

java - 编译错误 : Lambda Target Type Intersection Type

groovy - 为什么 Groovy 没有捕获我的 instanceof?

JavaScript 对象实例函数和函数实例对象

java - 在将其作为 JSON 发送时忽略 Java 对象的选定字段

java - Jmeter:如何在单个请求中传递数组值?

Javascript !instanceof If 语句