pecs_Java 泛型: 什么是PECS - 穿梭于偶然
什么是
下面是一个简单的Stack的API接口:
public class Stack{
public Stack();
public void push(E e):
public E pop();
public boolean isEmpty();
}
假设想增加一个方法,按顺序将一系列元素全部放入Stack中,你可能想到的实现方式如下:
public void pushAll(Iterable src){
for(E e : src)
push(e)
}
假设有个Stack,想要灵活的处理Integer,Long等Number的子类型的集合
Stack numberStack = new Stack();
Iterable integers = ....;
numberStack.pushAll(integers);
此时
幸好java提供了一种叫有限通配符的参数化类型,pushAll参数替换为“E的某个子类型的Iterable接口”:
public void pushAll(Iterable extends E> src){
for (E e: src)
push(e);
}
这样就可以正确编译了,这里的 extends E>就是所谓的 producer-extends。这里的Iterable就是生产者,要使用 extends E>。因为Iterable extends E>可以容纳任何E的子类。在执行操作时,可迭代对象的每个元素都可以当作是E来操作。
与之对应的是:假设有一个方法popAll()方法,从Stack集合中弹出每个元素,添加到指定集合中去。
public void popAll(Collection dst){
if(!isEmpty())
dst.add(pop());
}
假设有一个Stack和Collection对象:
Stack numberStack = new Stack();
Collection objects = ...;
numberStack.popAll(objects);
同样上面这段
总结:
1、如果你是想遍历collection,并对每一项元素操作时,此时这个集合时生产者(生产元素),应该使用 Collection extends Thing>
2、如果你是想添加元素到collection中去,那么此时集合时消费者(消费元素)应该使用Collection super Thing>
pecs_Java 泛型: 什么是PECS - 穿梭于偶然相关推荐
- java pecs_Java 泛型: 什么是PECS(Producer Extends, Consumer Super)
什么是PECS? PECS指"Producer Extends,Consumer Super".换句话说,如果参数化类型表示一个生产者,就使用:如果它表示一个消费者,就使用,可能你 ...
- pecs_Java泛型中的PECS原则
今天在写代码的时候使用到了这样一个方法签名:public void foo(Map map); 在写这个参数的时候正好在想一些关于泛型的东西,于是:public void foo(Map extend ...
- java pecs_Java 泛型 PECS
在stackoverflow上看到两篇关于java泛型 PECS 的问答: PECS Remember PECS:"Producer Extends,Consumer Super" ...
- pecs_java泛型-PECS
1 packagecom.example.base;2 3 importjava.util.ArrayList;4 importjava.util.List;5 6 importcom.example ...
- java pecs_Java泛型PECS
我知道PECS是什么意思. 制作人扩展,消费者超级. 问题是我怎么知道它是消费者还是生产者? 此代码也遵循"PECS" public class Tree { //List of ...
- Java泛型中的PECS原则
今天在写代码的时候使用到了这样一个方法签名: public void foo(Map<String, String> map); 在写这个参数的时候正好在想一些关于泛型的东西,于是: pu ...
- java pecs_『Java』泛型中的PECS原则
Java编程中有时我们要用到不确定的元素,通常用通配符"?"表示,其中" ? extends T "叫"上界通配符", " ? s ...
- Java 泛型中的PECS原则
在泛型编程时,使用部分限定的形参时,<? super T>和<? extends T>的使用场景容易混淆,PECS原则可以帮助我们很好记住它们: 生产者(Producer)使用 ...
- 泛型通配符之PECS
目录 基础知识点 上限通配符 List中上限通配符的add()方法 List中上限通配符的get()方法 下限通配符 List中下限通配符的add()方法 List中下限通配符的get()方法 基础知 ...
最新文章
- 关于幂等性的解决方案
- Python之web开发(六):python使用django框架搭建网站之图表显示操作
- 如何将freemarker文件转化为html文件
- ansys流固耦合分析与工程实例模型文件_平板射流冲击流固耦合分析
- 60度斜坡怎么计算_【测绘】南方CASS土方计算方法—方格网法
- Python函数积累
- JavaScript 大揭秘:React、性能优化以及多线程
- 《深度易经·deepin-bible》草稿汇
- 苏州企业如何识别不良商标代理机构
- 计算机术语root,root是什么意思
- 使用python做迷宫
- China Mobile announces acquisition of China Railway Communication, unveiling industry reshuffle
- php三种流程结构,3.流程控制结构
- linux 负载高 cpu低,Linux服务器CPU使用率较低但负载较高
- iOS开发:图标生成器Prepo 的使用,讲的明明白白
- 使用小米天气API获取天气信息
- plsql无法连接oracle,报错:ORA-12514
- js计时器实现页面刷新和幻灯片效果
- 计算机网络中的32种掩码和反掩码
- ppt护理文书流程图_降低护理文件书写完整率.ppt