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()方法 基础知 ...
最新文章
- 4000字,详解 Python 操作 MySQL 数据库!
- Python3.5源码分析-sys模块及site模块导入
- 十大编程算法助程序员走上高手之路
- 一篇RxJava友好的文章(一)
- OpenCASCADE可视化:应用交互服务之本地选择
- 上传文件返回数据提示下载
- cmake 找不到 macros_愿我们在彼此看不到的岁月里熠熠生辉
- rocket mq 监听端口_浅谈业务流程中的mq使用方式
- viewcube翻译_view cube是什么意思
- jfinal html页面在多个路径,jfinal不能正确加载html网页,总是报错的解决方法
- 1.5.2 编译java程序
- 文件名lin.php是什么,宝塔面板-PHP服务添加‘扩展名=ixed.5.4.lin
- 可持久化线段树(主席树)总结及板子
- 科研论文中的图片如何保证高清
- 厦大C语言上机1381
- 前端寒假css(100-181)
- 特征选择 - 逐步回归 (stepwise regression)
- Eslint 从入门到放弃
- python类中的__dict__
- linux必学的100个命令,Linux必学的60个命令