- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我对这个方法有疑问来自 java.util.Collections
:
public class Collections {
public static <T> void copy(List<? super T> dest, List<? extends T> src) {
for (int i=0; i<src.size();i++)
dest.set(i,src.get(i));
}
}
我了解如何 <? super T>
有效,但是,我不明白为什么第一个参数是 List<? super T>
而不是 List<T>
.我认为它在这种情况下没用。
使用 List<T>
应该也能正常工作,不是吗?
如果可能的话,你能给我一些例子来理解它吗?
谢谢。
最佳答案
不,这是有道理的。例如,考虑这种情况:
T
是InputStream
dest
是 List<Object>
src
是 List<FileInputStream>
那绝对没问题。当然,您可以制作T
Object
或 FileInputStream
在这种情况下 - 但假设您正在调用这个来自 一个签名为:
public void doSomething(List<? super InputStream> streams) {
// I want to use copy in here for some reason
}
你不知道这是一个List<InputStream>
- 只有它是 List<? super InputStream>
.如果dest
copy
中的参数只是 List<T>
,我们会被卡住……但是按照它的编写方式,我们没问题。
就我们对目标列表的要求而言,这也很有意义 - 我们只是需要能够设置 T
的值在里面。同样,我们对源列表的所有要求是我们可以获得 T
的值。从中。 <? super T>
和 <? extends T>
很好地表达这些要求。
关于java - 泛型集合 PECS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856109/
关闭。这个问题是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 之间的混淆吗
我是一名优秀的程序员,十分优秀!