用?在列表参数中

时间:2018-02-10 10:00:37

标签: java

我正在尝试将CustomObject添加到CustomObject列表中(它封装在另一个类CustomObjectList中)。 但是,我的控制台上出现以下错误:

  

Type CustomObjectList中的方法.add(CustomObject)不适用于参数(capture#5-of?extends ICustomObject)。

ICustomObject是CustomObject实现的接口。

CustomObjectList的实施方式如下:

class CustomObjectList {
    private List<CustomObject> bar = new ArrayList<CustomObject>();

    public List<CustomObject> getCustomObjectList() {
        return this.bar;
    }

    public void add(CustomObject foo) {
        this.bar.add(foo);
    }
}

引发错误消息的代码如下:

CustomObjectList randomName = new CustomObjectList();
for (ICustomObject iCO : anOtherObject.getCustomObjectList()) {
    randomName.add(iCO);
}

使用:

public class anOtherObject {
    private CustomObjectList customObjectList;
    public List<? extends ICustomObject> getCustomObjectList {
        return customObjectList.getCustomObjectList();
    }
} 

有谁理解这似乎是什么问题?我在这里很茫然。我知道!,应该是泛型,但我不明白它是如何工作的......

1 个答案:

答案 0 :(得分:2)

接口返回实现ICustomObject的对象列表,但这些对象可能不是CustomObject类(因为其他类也可能实现ICustomObject),因此您无法将这些返回的项添加到CustomObjects列表中