问题标签 [pecs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
15 回答
136874 浏览

java - 什么是PECS(Producer Extends Consumer Super)?

我在阅读泛型时遇到了 PECS(生产者extends和消费者的缩写)。super

有人可以向我解释如何使用 PECS 来解决和之间的混淆extendssuper

0 投票
2 回答
156 浏览

java - Java 的 TreeSet.add() 不遵循 PECS 原则问题 (Generics)

我有以下代码:

no suitable method for...在添加段实例时得到一个。似乎 Java 的树集没有应用 PECS 原则。这个问题有解决方案吗?

解决方案

我实现了:

inSegmentImpl_v1并调用它someFunction()

0 投票
1 回答
128 浏览

java - 是否可以编写一个接受不同抽象的通用参数的方法?

作为这个问题的后续,是否可以编写一个将 a 添加Dog到合适房间的方法?(在这个例子中,它会接受一个Animal房间或一个Dog房间。)或者我是否被迫编写如下两种不同的方法?(由于类型擦除,我什至不能依赖重载)。

0 投票
3 回答
924 浏览

java - Java 泛型 PECS

我知道PECS是什么意思。

生产者扩展,消费者超级。

问题是我怎么知道它是消费者还是生产者?

此代码是否也遵循“PECS”

0 投票
4 回答
149 浏览

java - 为什么在集合中添加类型为 a 的子类是非法的?

鉴于此代码段

为什么不允许 num.add(doub) ?不是List<List<Number>>超级类型 List<List<Double>>吗?

0 投票
2 回答
272 浏览

java - 具有“超级”类型的有界泛型方法

根据我阅读的文献,我们有 juicy fruits 实现了以下接口:

使用有界类型变量,以下方法将取出一堆水果并将它们全部挤压:

现在我们也需要如下的低级兄弟姐妹来工作:

所以我希望该方法如下所示:

相反,我发现方法签名如下:

是什么解释了这种差异?

0 投票
5 回答
1227 浏览

java - Java 泛型(有界通配符)

根据 Joshua Bloch 的“Effective Java”一书,有一条关于如何/何时在泛型中使用有界通配符的规则。这条规则就是 PECS(Producer-Extends,Comsumer-Super)。当我研究以下示例时:

我知道这条规则非常适合这个例子。我必须将该方法声明pushAll为以下示例:

但是,如果我有以下示例,会发生什么?

我必须声明pushAll如下:

根据PECS规则,上述声明是错误的。但我想要 a Stackof Integers 并传递给这个Stacka Number。为什么不去做呢?
为什么我应该总是使用extends关键字?为什么使用super是错误的?
当然,同样代表消费者的观点。为什么消费者应该永远是super


PS:更具体地说,您可以在参考书的“第 28 项”部分找到上述示例。

0 投票
3 回答
545 浏览

java - Java、泛型和 PECS:仍然无法理解 C 部分;具体例子?

我将在这里发布一个链接:Collections.sort(). 关于 PECS 范式的 SO 上有很多帖子,包括这个。在我自己的个人代码中,我经常使用泛型,但只使用过 P 部分(即<X extends SomethingElse>)。

Collections.sort期望作为其泛型参数 a <T extends Comparable<? super T>>。我看不到那里的super踢脚线。你有一个具体的例子说明为什么这是必要的吗?

当我这样做时,我很担心我也不理解 P 的全部含义......我已经阅读了很多很多链接,但没有清楚、明显的证据证明 P 是 P 并且 C 是 C。 ..

编辑至于这里可能已经有答案“:不,抱歉。我已经阅读了这个链接,以及其他许多关于 SO 的链接。这仍然没有告诉我这一切背后的核心机制。到目前为止给我的两个答案给出了我的提示,实际上比到目前为止我能找到的所有链接都多。

0 投票
3 回答
2635 浏览

java - 生产者和消费者在 Java 中的泛型

我有这个方法来检索作为给定类的实例的对象:

要调用该方法,我可以执行以下操作:

这很好,但我也希望能够以这两种方式调用该方法:

或者

我的意思是我希望能够将方法的结果存储在狗集合或动物集合中,因为Dog.class扩展Animal.class

我在想这样的事情:

但它不起作用。有什么提示吗?

编辑:最后,使用@Rohit Jain 回答,这是调用 UtilitiesClass 方法时的解决方案:

0 投票
3 回答
296 浏览

java - 克服泛型 put-get 规则

我已经阅读了应该阻止您将 a 添加到 a的泛型 get 和 put 规则BananaList<? extends Fruit>

我知道,如果您没有编译错误,您将能够:

这听起来是错误的,因为您在同一个列表中获得了不同的对象类型(我看到@Tom Hawtins 的回答解释了原因,我相信他:)(虽然我找不到它的链接))。

但是,如果您执行以下操作:

然后做:

你没有得到编译错误,以及以下(预期的)输出:

我这样做是否违反了任何合同?还是我在规避保护并且不应该这样做?