[英]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.