java - 遍历 ArrayList 并返回满足 instanceof 检查的对象的 ArrayList

标签 java interface arraylist superclass instanceof

我在类类型方面遇到了问题。我有一个父类(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/

相关文章:

java - 将 java 变量数据映射到 C 结构并编写一个 c 兼容文件

java - 将几个随机数添加到图像上方的图形上下文中

java - 具有自定义行和列的二维数组

c# - 方法的通用版本与接口(interface)版本

Java实现两个接口(interface)并解决默认方法冲突 : why using super keyword?

java - 今天接口(interface)中的字段有好的用例吗?

android - Kotlin-在随机列表中获取新的项目索引

java - Jackson Mapper 在三星 SM-T580 上抛出 "conflicting setter definitions"

java - 如何在 java ArrayList<Long> 中进行二进制搜索?

java - 如何将点击播放/暂停添加到 VideoView?