- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在阅读泛型时遇到了 PECS(Producer extends
和 Consumer super
的缩写)。
有人可以向我解释如何使用 PECS 来解决 extends
和 super
之间的混淆吗?
最佳答案
tl;dr:“PECS”是从集合的角度来看的。如果您仅从通用集合中提取项目,那么它是生产者,您应该使用 extends
;如果您仅填充元素,则它是消费者,您应该使用 super
。如果您对同一个集合执行这两项操作,则不应使用 extends
或super
.
假设您有一个方法,该方法将一组事物作为参数,但您希望它比仅接受 Collection<Thing>
更灵活。 .
情况 1:您想要浏览集合并对每个项目执行操作。
那么列表是一个生产者,所以你应该使用 Collection<? extends Thing>
.
推理是 Collection<? extends Thing>
可以包含 Thing
的任何子类型,因此每个元素将表现为 Thing
当您执行操作时。 (实际上,您无法向 Collection<? extends Thing>
添加任何内容(除了 null),因为您无法在运行时知道该集合包含 Thing
的哪个特定子类型。)
情况 2:您想要将内容添加到集合中。
那么该列表是一个消费者,所以你应该使用 Collection<? super Thing>
.
这里的推理是与 Collection<? extends Thing>
不同, Collection<? super Thing>
永远可以持有Thing
无论实际的参数化类型是什么。在这里,您不关心列表中已有的内容,只要它允许Thing
即可。待添加;这就是? super Thing
保证。
关于java - 什么是 PECS(生产者扩展消费者 super )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59522567/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
为什么我不能向消费者添加一个整数? import java.util.*; public class Test { public static void main(String[] args)
我有一家提供餐食的餐厅。厨房里的盘子是消费者的。 class Food{} class Bamboo extends Food {} interface Kitchen { void buil
Joshua Bloch 提出了 PECS,它规定了何时使用 的规则?扩展 T 和 ? super T。如果您从集合框架的角度考虑 PECS,那么它非常简单。如果向数据结构添加值,请使用 ? supe
我对这个方法有疑问来自 java.util.Collections : public class Collections { public static void copy(List dest
我知道PECS是什么意思。 生产者扩展,消费者 super 。 问题是我怎么知道它是消费者还是生产者? 此代码是否也遵循“PECS” public class Tree { //List of
我正在尝试匹配短语中的“单词”pec+ I cannot find pec+ 我已经尝试了模式\bpec\+\b,但是没有匹配项。 最佳答案 因为 + 不是单词字符,您需要使用 \B 匹配非单词边界来
在 Effective Java 中,Joshua Bloch 讨论了 PECS(Producer-Extends,Consumer-Super)的原理。 我对此的理解是,为了提高 API 的灵活性,
我在阅读泛型时遇到了 PECS(Producer extends 和 Consumer super 的缩写)。 有人可以向我解释如何使用 PECS 来解决 extends 和 super 之间的混淆吗
我在阅读泛型时遇到了 PECS(Producer extends 和 Consumer super 的缩写)。 有人可以向我解释如何使用 PECS 来解决 extends 和 super 之间的混淆吗
我在阅读泛型时遇到了 PECS(Producer extends 和 Consumer super 的缩写)。 有人可以向我解释如何使用 PECS 来解决 extends 和 super 之间的混淆吗
我在阅读泛型时遇到了 PECS(Producer extends 和 Consumer super 的缩写)。 有人可以向我解释如何使用 PECS 来解决 extends 和 super 之间的混淆吗
我在阅读泛型时遇到了 PECS(Producer extends 和 Consumer super 的缩写)。 有人可以向我解释如何使用 PECS 来解决 extends 和 super 之间的混淆吗
我在阅读泛型时遇到了 PECS(Producer extends 和 Consumer super 的缩写)。 有人可以向我解释如何使用 PECS 来解决 extends 和 super 之间的混淆吗
我在阅读泛型时遇到了 PECS(Producer extends 和 Consumer super 的缩写)。 有人可以向我解释如何使用 PECS 来解决 extends 和 super 之间的混淆吗
阅读 Java Essentials,第 2 版,有一个称为 PECS 的规则用于方法参数中的类型安全。如果它产生你扩展,消耗你使用 super 。对不起,如果我定义错误,因为我不明白。 谁能阐明 J
我在阅读泛型时遇到了 PECS(Producer extends 和 Consumer super 的缩写)。 有人可以向我解释如何使用 PECS 来解决 extends 和 super 之间的混淆吗
我在阅读泛型时遇到了 PECS(Producer extends 和 Consumer super 的缩写)。 有人可以向我解释如何使用 PECS 来解决 extends 和 super 之间的混淆吗
我在阅读泛型时遇到了 PECS(Producer extends 和 Consumer super 的缩写)。 有人可以向我解释如何使用 PECS 来解决 extends 和 super 之间的混淆吗
我在阅读泛型时遇到了 PECS(Producer extends 和 Consumer super 的缩写)。 有人可以向我解释如何使用 PECS 来解决 extends 和 super 之间的混淆吗
我是一名优秀的程序员,十分优秀!