![](/img/trans.png)
[英]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.