Java arraylist问题(捕获?)

时间:2011-05-12 06:35:31

标签: java arraylist

在java中,我有一个包含以下内容的arraylist

 List<IMyInterface>

我在函数

中返回它
List<? extends IMyInterface> getList()

现在我想做以下事情

getList().add(MyElement)

其中MyElement扩展了界面。

我得到的是一个编译错误,该方法期待别的东西 这是:

列表中的

添加(捕获)无法应用于(MyElement)。

。虽然MyElement扩展了IMyInterface

BTW:大胆捕获这个词是什么? 感谢。

1 个答案:

答案 0 :(得分:2)

添加是一个使用者方法,它会消耗要添加到列表中的内容,因此您希望将添加内容的任何列表限制在下面(? super Foo)而不是上面( Foo extends ?)。

有关详细信息,请参阅this question on PECS

为了使其更具体,想象一下底层是List<MyBetterInterface>,其中MyBetterInterface扩展IMyInterface。现在你仍然可以使用相同的签名来实现getList()方法 - 但是对于调用者而言,添加仅实现IMyInteface的对象显然无效,因为现在你有了一些对象那里不是MyBetterInterface

因此将其声明为

List<? super IMyInterface> getModifiableList();