[英]Extract subclass elements from List of parent class
我目前有一個像這樣的清單:
List<Parent> parentList = new Arraylist<>;
//Code inserts elements of subclassA and subclass B into parentList above
現在,我想從parentList中提取屬於子類A的元素。我想執行以下操作,但沒有錯誤:
List<SubclassA> extractMe = new Arraylist<>;
for (Parent parent: parentList){
if (parent.isSubclassA()){extractMe.add(parent);}
}
我不確定該怎么做。 我不斷收到錯誤,因為我將可能是錯誤的對象類型/類添加到列表中,我理解為什么,但是我不知道如何更改代碼以使其正常工作。
編輯:
錯誤(我將類重命名為與上面使用的類匹配):
Error:(53, 20) java: no suitable method found for add(Parents.Parent)
method java.util.Collection.add(Parents.SubclassA) is not applicable
(argument mismatch; Parents.Parent cannot be converted to Parents.SubclassA)
method java.util.List.add(Parents.SubclassA) is not applicable
(argument mismatch; Parents.Parent cannot be converted to Parents.SubclassA)
Java中有一個名為instanceof
的關鍵字,它將實例化的對象與類定義進行比較,以查看該對象是否屬於特定的類類型。
在您的示例中,可以在循環中使用instanceof關鍵字,然后將父對象強制轉換為子類並將其添加到列表中。
for(Parent parent : parentList)
{
if(parent instanceof SubclassA)
{
SubclassA subclass = (SubclassA)parent;
extractMe.add(subclass);
}
}
需要將父對象轉換為子類(SubclassA)parent
對象,因為即使您可能已經檢查了parent
對象為SubclassA
類型, 編譯器仍然不知道 ,因此您必須明確告訴編譯器將parent
對象轉換為SubclassA
。
另外請注意, instanceof
關鍵字是java中的內置二進制運算符,它將根據您隨后指定的類檢查父級。 僅當您可以將parent
SubclassA
為SubclassA
, SubclassA
parent instanceof SubclassA
才為true。 請參閱Oracle Docs示例 :
類型比較運算符instanceof
instanceof運算符將對象與指定類型進行比較。 您可以使用它來測試對象是實現特定接口的類的實例,子類的實例還是類的實例。
以下程序InstanceofDemo定義了一個父類(名為Parent),一個簡單接口(名為MyInterface)以及一個從父類繼承並實現該接口的子類(名為Child)。
class InstanceofDemo { public static void main(String[] args) { Parent obj1 = new Parent(); Parent obj2 = new Child(); System.out.println("obj1 instanceof Parent: " + (obj1 instanceof Parent)); System.out.println("obj1 instanceof Child: " + (obj1 instanceof Child)); System.out.println("obj1 instanceof MyInterface: " + (obj1 instanceof MyInterface)); System.out.println("obj2 instanceof Parent: " + (obj2 instanceof Parent)); System.out.println("obj2 instanceof Child: " + (obj2 instanceof Child)); System.out.println("obj2 instanceof MyInterface: " + (obj2 instanceof MyInterface)); } } class Parent {} class Child extends Parent implements MyInterface {} interface MyInterface {}
輸出:
obj1 instanceof Parent: true obj1 instanceof Child: false obj1 instanceof MyInterface: false obj2 instanceof Parent: true obj2 instanceof Child: true obj2 instanceof MyInterface: true
使用instanceof運算符時,請記住,null不是任何實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.