获取原则的解释我读过O'Reilly的书,因为我开始了解这个获取原则。extends仅从结构中获取值时使用通配符。super仅在将值放入结构时使用通配符。当你们想要从一个结构中获取和放置时,不要使用通配符。例外情况是:extends除了null属于每个引用类型的值之外,您不能将任何内容放入使用通配符声明的类型中。super除了type的值之外,您不能从使用通配符声明的类型中获取任何内容Object,这是每种引用类型的超类型。任何人都可以帮助我深入探索这条规则吗?如果可能的话,请将它们分层。
1 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
考虑一堆香蕉。这是一个Collection<? extends Fruit>
特定种类的水果的集合 - 但你不知道(从那个宣言)它是什么样的水果集合。你可以从它得到一个项目,并知道它肯定会是一个水果,但你不能添加它 - 你可能会尝试添加一个苹果到一堆香蕉,这肯定是错误的。您可以添加null
它,因为这将是任何类型的水果的有效值。
现在考虑一个水果碗。这是一个Collection<? super Banana>
,因为它是“大于”某种类型的集合Banana
(例如,Collection<Fruit>
或Collection<TropicalFruit>
)。你绝对可以添加一个香蕉,但如果你从碗里拿一个东西你不知道你会得到什么 - 它可能不是香蕉。所有你肯定知道它将是一个有效的(可能null
)Object
参考。
(一般来说,对于Java泛型问题,Java泛型常见问题解答是一个很好的资源,其中包含几乎所有与泛型有关的答案,你可能会把它抛出来。)
添加回答
举报
0/150
提交
取消