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