gpt4 book ai didi

Java arraylist问题(捕获?)

转载 作者:行者123 更新时间:2023-11-30 09:49:10 26 4
gpt4 key购买 nike

在 java 中我有一个包含以下内容的数组列表

 List<IMyInterface>

我在一个函数中返回它

List<? extends IMyInterface> getList()

现在我想做以下事情

getList().add(MyElement)

其中 MyElement 扩展了接口(interface)。

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

在列表中添加 (capture ) 不能应用于 (MyElement)。

.尽管 MyElement 扩展了 IMyInterface

顺便说一句:Capture 这个词的粗体是什么?谢谢。

最佳答案

Add 是一个 consumer 方法,它消耗要添加到列表中的东西,所以你希望你添加东西的任何列表都限制在 ( ? super Foo ) 下面而不是上面 ( Foo extends ? )。

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

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

所以声明为

List<? super IMyInterface> getModifiableList();

关于Java arraylist问题(捕获?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5974205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com