什么是

下面是一个简单的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 - 穿梭于偶然相关推荐

  1. java pecs_Java 泛型: 什么是PECS(Producer Extends, Consumer Super)

    什么是PECS? PECS指"Producer Extends,Consumer Super".换句话说,如果参数化类型表示一个生产者,就使用:如果它表示一个消费者,就使用,可能你 ...

  2. pecs_Java泛型中的PECS原则

    今天在写代码的时候使用到了这样一个方法签名:public void foo(Map map); 在写这个参数的时候正好在想一些关于泛型的东西,于是:public void foo(Map extend ...

  3. java pecs_Java 泛型 PECS

    在stackoverflow上看到两篇关于java泛型 PECS 的问答: PECS Remember PECS:"Producer Extends,Consumer Super" ...

  4. pecs_java泛型-PECS

    1 packagecom.example.base;2 3 importjava.util.ArrayList;4 importjava.util.List;5 6 importcom.example ...

  5. java pecs_Java泛型PECS

    我知道PECS是什么意思. 制作人扩展,消费者超级. 问题是我怎么知道它是消费者还是生产者? 此代码也遵循"PECS" public class Tree { //List of ...

  6. Java泛型中的PECS原则

    今天在写代码的时候使用到了这样一个方法签名: public void foo(Map<String, String> map); 在写这个参数的时候正好在想一些关于泛型的东西,于是: pu ...

  7. java pecs_『Java』泛型中的PECS原则

    Java编程中有时我们要用到不确定的元素,通常用通配符"?"表示,其中" ? extends T "叫"上界通配符", " ? s ...

  8. Java 泛型中的PECS原则

    在泛型编程时,使用部分限定的形参时,<? super T>和<? extends T>的使用场景容易混淆,PECS原则可以帮助我们很好记住它们: 生产者(Producer)使用 ...

  9. 泛型通配符之PECS

    目录 基础知识点 上限通配符 List中上限通配符的add()方法 List中上限通配符的get()方法 下限通配符 List中下限通配符的add()方法 List中下限通配符的get()方法 基础知 ...

最新文章

  1. 关于幂等性的解决方案
  2. Python之web开发(六):python使用django框架搭建网站之图表显示操作
  3. 如何将freemarker文件转化为html文件
  4. ansys流固耦合分析与工程实例模型文件_平板射流冲击流固耦合分析
  5. 60度斜坡怎么计算_【测绘】南方CASS土方计算方法—方格网法
  6. Python函数积累
  7. JavaScript 大揭秘:React、性能优化以及多线程
  8. 《深度易经·deepin-bible》草稿汇
  9. 苏州企业如何识别不良商标代理机构
  10. 计算机术语root,root是什么意思
  11. 使用python做迷宫
  12. China Mobile announces acquisition of China Railway Communication, unveiling industry reshuffle
  13. php三种流程结构,3.流程控制结构
  14. linux 负载高 cpu低,Linux服务器CPU使用率较低但负载较高
  15. iOS开发:图标生成器Prepo 的使用,讲的明明白白
  16. 使用小米天气API获取天气信息
  17. plsql无法连接oracle,报错:ORA-12514
  18. js计时器实现页面刷新和幻灯片效果
  19. 计算机网络中的32种掩码和反掩码
  20. ppt护理文书流程图_降低护理文件书写完整率.ppt

热门文章

  1. 基础架构-架构理论简析
  2. python datetime函数介绍_Python datetime包函数简单介绍
  3. 计算计:无规则中的规则
  4. 何才能利用绩效管理和薪酬管理激励员工?
  5. Java入门 第八节面向对象(三)
  6. CSS 基本语法 选择器的各种用法 常用属性
  7. 舒舍说:女生第一次租房要注意哪些问题?
  8. 如果识别人体的动作的话 建议用什么算法
  9. js-xlsx基本使用(vue)
  10. 某数据中心能效诊断及节能改造的技术措施