1 packagecom.example.base;2

3 importjava.util.ArrayList;4 importjava.util.List;5

6 importcom.example.spring.MyLog;7 /**

8 * Producer extends Consumer super 生产者使用extends,consumer使用super9 * 这里的生产者和消费者是相对容器而言的,10 * 生产者只能对外提供数据,不可以写入数据,数据来源于赋值操作(将参数化类型为子类的容器赋值过来)11 * 消费者表示只能向容器中写入数据,不能读取(只能以Object来接收)12 * 这里的extends和super指的是声明类型和参数化类型的关系,13 * 如下所示:等号左侧类型为声明类型,右侧为参数化类型14 * List extends Number> intList = new ArrayList();15 * private List super Number> intList2 = new ArrayList();16 * @DESC17 *@authorguchuang18 *19 */

20 public classPECS {21

22 int int1 = 1;23 long long1 = 11;24 Number number1 = 10;25

26 private List intList = new ArrayList();27 private List longList = new ArrayList();28 private List numberList = new ArrayList();29

30 public static voidmain(String[] args) {31 PECS pecs = newPECS();32 pecs.pe();33 pecs.cs();34 }35

36 /**

37 * extends Number> 这种方式声明的泛型容器,不能写入任何类型的数据,只能读取数据38 * 其指定了上确界为Number,参数化类型(如:实际新建的容器类型T new ArrayList())必须是Number的子类,所以读出的数据都可以上转型为Number39 * 理论含义是容器内包含的数据可能是Number的任何一种子类,所以无法添加数据。40 * 写数据的方式:41 * 声明一个具体类型(Number的子类型)的容器,向其中添加数据,将这个容器赋值给numbers容器42 * 优势:43 * 避免调用者向此容器内写入数据,只能读取里面的数据44 */

45 public voidpe() {46 // extends Number> 这种方式声明的泛型容器,不能写入任何类型的数据

47 List extends Number> numbers = new ArrayList();48 //下面三种添加数据都会导致编译报错49 //foo.add(int1);50 //foo.add(long1);51 //foo.add(number1);52

53 //Number number = numbers.get(0);

54

55 intList.add(123);56 intList.add(456);57 //将新创建的具有确定类型的容器(必须是Number的子类型)赋值给numbers,起到生产数据的目的

58 numbers = intList; //新容器的参数化类型是Integer,是Number的子类,所以可以赋值

59 MyLog.info(numbers);60 Number number = numbers.get(0); //读出来的类型依然是Number

61 MyLog.info("read from ? extends Number: " +number);62 numbers =longList;63 numbers =numberList;64 }65

66 /**

67 * Consumer super68 * ? super Number 表示容器中所有的数据类型都是Number或者Number的超类型,69 * 所以Number及其子类型(可以上转型为Number)可以写入,读取的时候由于不能确定类型,只能使用Object接收70 */

71 public voidcs() {72 List super Number> numbers = new ArrayList();73 numbers.add(int1);74 numbers.add(long1);75 numbers.add(number1);76 //numbers.add(new Object()); 编译报错

77 MyLog.info(numbers);78

79 //Number n = numbers.get(0); 编译报错

80 Object n = numbers.get(0); //只能以Object来接收数据81 //numbers = intList; 编译报错

82 numbers =numberList;83 numbers = new ArrayList();84 }85 }

pecs_java泛型-PECS相关推荐

  1. java pecs_Java 泛型 PECS

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

  2. java pecs_Java泛型PECS

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

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

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

  4. pecs_Java泛型中的PECS原则

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

  5. pecs_Java 泛型: 什么是PECS - 穿梭于偶然

    什么是 下面是一个简单的Stack的API接口: public class Stack{ public Stack(); public void push(E e): public E pop(); ...

  6. java pecs_JAVA的PECS原则

    https://segmentfault.com/a/1190000017509439 JAVA的PECS原则 PECS指"Producer Extends,Consumer Super&q ...

  7. java 泛型 PECS准则

      我们知道<?>表示:我想使用Java泛型来编写代码,而不是用原生类型:但是在当前这种情况下,我并不能确定下泛型参数的具体类型,因此用?表示任何某种类型.因此,根据我们对通配符的了解,使 ...

  8. Java 泛型的读写规则:PECS

    PECS 是 "Producer Extends Consumer Super" 的缩写,是 Java 泛型中的重要用法. PECS 就是当你需要遍历某一个类型和子类的集合数据时, ...

  9. HowToDoInJava Java 教程·翻译完成

    原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 核心 Java 教程 什 ...

最新文章

  1. 万字长文带你看尽深度学习中的各种卷积网络
  2. 因缺失log4j.properties 配置文件导致flume无法正常启动。
  3. WinForm应用只运行一次
  4. Java数据结构Map遍历和排序
  5. python环境设置_MacOS中的Python(和NumPy)开发环境设置
  6. AFAB 科目要求一个成本会计分配
  7. JZOJ 2413. 【NOI2005】维护数列
  8. Linux之查看ubuntu版本
  9. NoSQL开篇——为什么要使用NoSQL
  10. 聊聊JVM(八)说说GC标记阶段的一些事
  11. 有温度的技术,改善上亿人的生活
  12. 运行QQ出现initialization failure 0x0000000c错误和浏览器上不了网
  13. c语言char转cstring,CString、TCHAR*、char*转换 | 时刻需
  14. golang http Specifically check for timeout error
  15. C#后台调用前台js(RegisterStartupScript)
  16. SQL2K数据库开发十四之表操作设置用户对表的权限
  17. Android常见界面布局(详细介绍)
  18. Android强大log框架Logger使用详解
  19. 【全套资料.zip下载】数电课设-色子骰子模拟电路Multisim仿真设计【Multisim仿真+报告+讲解视频.zip下载】
  20. C语言实现通讯录管理系统(动态内存分配版)

热门文章

  1. MATLAB中im2bw函数-将图像转换为二值图像
  2. 怎样在线做动图?一招教你快速完成gif动画制作
  3. 小程序wx.onLocationChange向下兼容wx.getLocation
  4. Python推导式-[xx for xx in range() if xx]
  5. 关于中兴客户认证端破解的猜想
  6. 计算机操作系统的目标和作用
  7. opengl中对glOrtho()函数的理解
  8. 基于Duffing系统的分数阶混沌研究【基于matlab的动力学模型学习笔记_5】
  9. 一个乒乓球引发的一系列问题(穷举法)
  10. js 替换字符串中所有 “ 引号 —— 数据处理