我在类类型方面遇到了问题。我有一个父类(super class)“Edible”和一个界面“Colorful”。并非所有可食用元素都是彩色的,因此彩色仅在某些可食用元素上实现。我正在尝试获取可食用项目的 ArrayList,遍历它,并返回一个仅包含彩色项目的新 ArrayList。我现在收到的错误是
“类型 ArrayList 中的方法 add(Colorful) 不适用于参数 (Edible)”
我怎样才能绕过这个限制?
private ArrayList<Edible> elist;
private ArrayList<Colorful> clist;
public List<Colorful> getColorfulItems(){
for(Edible x : elist)
if(x instanceof Colorful){
clist.add(x);
}
return clist;
}
最佳答案
您需要将 Edible
类型转换为 Colorful
:-
if(x instanceof Colorful){
clist.add((Colorful)x);
}
或者,如果您想避免大小写,请使用 WildCard
声明您的 ArrayList:-
private ArrayList<? extends Colorful> clist;
通过像这样声明您的ArrayList
,您可以添加任何Colorful
的子类型
,而无需类型转换
此外,您不需要每次都返回修改后的列表,因为您的列表已声明为实例变量
。因此,更改将反射(reflect)在列表中,而不返回列表。
关于java - 遍历 ArrayList 并返回满足 instanceof 检查的对象的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899382/