[英]How to filter a List with two object of different class and with compare field in Java
[英]Compare object with class stored in field
我正在尝试将part
与构造函数提供的c
类进行比较,但由于某种原因,我的IDE会弹出警告,提示它永远为假。
Class<? extends Part> c;
public Slot(Class<? extends Part> c){
this.c = c;
}
public boolean addItem(Part part){
return part instanceof c;
}
为什么此instanceof语句始终为false?将part
与c
比较的正确语法是什么?
您应该调用以下Class方法:
当您调用“ instanceof c”时,“ c”应该是一个类,而不是变量。 在您的示例中,c是类型为Class的变量。
代替这个
if(part instanceof c) return true;
尝试这个
if(c.isAssignableFrom(part.getClass())) return true;
这与Class.isInstance(Object)
不同 ,因为当part
与c
part
同一类型或属于c
的子类时, isAssignableFrom
也返回true。
因此,如果您需要使用isInstance
确定它是否与类型完全相同 ,如果它也可以是子类,请使用isAssignableFrom
。
关于理解运算符instanceof
和Class
类。
类型比较运算符instanceof :
在运行时,如果
RelationalExpression
的值不为null
并且可以将引用强制转换为ReferenceType
而不引发ClassCastException
,则instanceof
运算符的结果为true
。 否则结果为false
。
这意味着您的代码if (part instanceof c) ...
将始终返回false,因为part
永远都不能转换为Class
。
如果查看Class.inInstance(Object obj) ,您会发现
此方法与Java语言
instanceof
运算符动态等效。
换一种说法:
instanceof
。 Class
类型的变量中),则可以使用Class.inInstance(Object obj)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.