首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏笔记本

    泛型的PECS原则

    泛型的PECS原则PECS(Producer extends Consumer supper)原则是用来帮助我们判断何时使用 ?extends T, 何时使用 ?super T的。

    14311编辑于 2025-06-12
  • 来自专栏架构专题

    面试常问的PECS原则,到底是什么鬼?

    PECS的全程是Producer Extends Consumer Super,第一次听说,我一脸懵逼。但看到jdk中越来越多的泛型代码,我决定去了解一下。 java的泛型,只在编译期有效。 这就是PECS原则。 为了解释这个原理,我们创建三个类。 A,B,C。 其中。A extends B,B extends C。 这也就有了我们上面所提到的“Producer Extends Consumer Super”,也就是PECS原则。 这个过程可真是绕,我认为这是定义非常失败的一个名词。 想要对PECS有更深入的了解,可以深入了解一下函数编程相关的这四个接口。哪怕你只是看一下它的定义,也会有一种原来如此的感觉。

    2.8K11发布于 2019-12-17
  • 来自专栏爪哇缪斯

    面试题2:说一下什么是PECS

    在泛型的上限和下限中有一个原则:PECS(Producer Extends Consumer Super) 请记住PECS原则: 生产者(Producer)使用extends; 消费者(Consumer

    46820编辑于 2023-05-09
  • 来自专栏Java 筑基与进阶

    深度拆解 Java 泛型:从底层擦除到 PECS 终极指南

    四、 终极武器:通配符与 PECS 原则 为了打破“不变性”的限制,我们需要通配符 ?。 1. 上界通配符 <? extends T> (协变) 含义: 类型是 T 或 T 的子类。 PECS 准则:如何选? 记住这个口诀:Producer Extends, Consumer Super。 如果你需要从集合中取数据(生产者),用 extends。 理解了擦除机制和 PECS 原则,你就掌握了 Java 泛型的灵魂。 作者: 予枫 (YF)

    23810编辑于 2026-01-12
  • 来自专栏Java基础

    【关于Java的泛型(高级)】

    记住这个口诀: PECS = Producer-Extends, Consumer-Super 如果你从集合中读取数据(它是“生产者”),用 ? super T(往里面写 T 类型的数据) 完美符合 PECS! 四、泛型的局限性(你知道吗?) 遵循 PECS 原则:生产者用 extends,消费者用 super。 六、总结:泛型的本质 概念 关键点 类型擦除 泛型只在编译期存在,运行时被擦除为 Object 或上限类型 通配符 ?  理解了类型擦除和PECS 原则,你就掌握了泛型的“内功心法”。 下次面试官再问:“说说泛型的原理”,你就可以从容不迫地说: “Java 泛型基于类型擦除实现,编译期检查类型安全,运行时擦除泛型信息。 super T,并遵循 PECS 原则……”

    24210编辑于 2025-08-28
  • 来自专栏简单就是美!

    Effective Java Second Edition中文版勘误列表 博客分类: Java Java出版ASPSUNBlog

    时间:2009.06.21 10:50:00已核实 页码:第119页,倒数第2段 原文:Both parameters, s1 and s2, are E producers, so the PECS mnemonic tells us that the declaration should be: 译文:s1和s2这两个参数都是E消费者,因此根据PECS,这个声明应该是: 修正:s1和s2这两个参数都是 E生产者,因此根据PECS,这个声明应该是: 说明:感谢 jinlingmin0624 提出,多谢!

    51730发布于 2019-02-28
  • 来自专栏日常笔记

    java 范型

    IllegalAccessException, InstantiationException { T r = t.newInstance(); return r; } SelfBound 可以防止类型重载 泛型不是协变的 PECS Object fruit = apples.get(0); PECS原则总结 从上述两方面的分析,总结PECS原则如下: 如果要从集合中读取类型T的数据,并且不能写入,可以使用 ? PECS JDK源码案例Collections copy方法 image.png

    1K00发布于 2020-05-10
  • 来自专栏技术分享交流

    搞明白 Java 的通配符泛型

    网上有一个简单的原则叫PECS(Producer Extends Consumer Super)原则:往外读取内容的,适合用上界 Extends,往里插入的,适合用下界 Super。 有人认为这是该函数的作者强调 PECS 原则,但是在这个情境下,这个原则并不合适。 其实,我们可以只把 T 固定为 Number,然后少用一个 <? 如果条件允许,比如这个函数中的 是根据参数类型确定的,我们应该优先使用 T,而不是生搬硬套 PECS 原则。 关于 PECS,我至今没记住这几个英文单词的顺序,我认为不能生搬硬套,还是要根据实际情况分析是否合理。 因为 PECS 最大的问题是它只告诉你用通配符泛型的情景下你应该如何选择,没有告诉你什么时候用 通配符泛型,什么时候不用。

    76320编辑于 2023-02-16
  • 来自专栏csdn

    一文彻底搞懂Java泛型中的PECS原则(在坑里躺了多年终于爬出来了)

    [简单粗暴]一文彻底搞懂Java泛型中的PECS原则(在坑里躺了多年终于爬出来了) 两种限定通配符 表示类型的上界,格式为:<? super T>,即类型必须为T类型或者T的父类 PECS原则 生产者只能用extends,消费者只能用super 上代码 public class Fruit { } public class Apple 限定通配符泛型(还不确定的泛型,但是有范围), 一般用于只添加(也可以获取,但是获取出来的是Object,没啥意义) List list 明确的泛型,可获取,也可添加,也是我们用的最多的泛型 JDK中的PECS

    83110编辑于 2024-04-10
  • 来自专栏关忆北.

    <? extends T>与<? super T>的区别

    PECS 来自《Effective Java》的一句话,producer-extends,consumer-super,两者通过规定上下界的形式来做数据限制。 (int i=0; i<srcSize; i++) { di.next(); di.set(si.next()); } } } PECS

    1.4K20编辑于 2022-05-05
  • 来自专栏各类技术文章~

    Java泛型的上下界

    什么是PECS原则? isEmpty()) { fruits.add(pop()); } } 复制代码 PECS原则 该如何理解生产者和消费者呢,? super E则相反,它是一直向集合中进行添加,就好像给它的东西都被它消费了一样,所以我们称它为消费者 那什么是PECS原则? PECS法则与extends和super关键字 《Effective Java(第三版)》 第31条 JAVA通配符——? extends T ,? super T(尖括号不让打吗不是吧不是吧)

    66511发布于 2021-10-24
  • 《JavaSE快速复习笔记》

    PECS原则(Producer-Extends, Consumer-Super): 生产者(读取数据)用 <? extends T>。 消费者(写入数据)用 <? super T>。 // 泛型方法示例 public <T> T getFirst(List<T> list) { return list.get(0); } // PECS应用:集合复制 public static

    10910编辑于 2025-12-21
  • 来自专栏Vincent-yuan

    <? extends T> 和 <? super T> 的使用

    具体的分析可以看下如下 : 最终PECS (Producer Extends Consumer Super ) 原则 频繁往外读取内容的,适合用上界Extends。 PECS原则 最后看一下什么是PECS(Producer Extends Consumer Super)原则,已经很好理解了: 频繁往外读取内容的,适合用上界Extends。

    1.3K32发布于 2021-06-21
  • 来自专栏蛮三刀的后端开发专栏

    Java中的范型使用 扫清盲点

    cannot be refrenced from static context" */ public static <E> void get(E t){ } } 范型通配符 泛型中的PECS PECS原则 所以我们得出了一个结论:PECS(Producer Extends Consumer Super)原则: 频繁往外读取内容的,适合用上界Extends。

    65810编辑于 2022-01-05
  • 来自专栏Android进阶之路

    Kotlin入门潜修之类和对象篇—泛型及其原理

    著名的PECS法则 上一章节中引出了java中通配符的概念,java中的通配符可分为三类: 1.无界通配符:? 2.子类限定通配符:<? extends E> 3.父类限定通配符:<? 这就是我们要讲的PECS原则。什么是PECSPECS的全称可以理解为Producer-Extends-Consumer-Super,即其描述了子类限制符和父类限制符的使用原则。 1.<? 声明处变量的作用就是在泛型类型参数前添加特定修饰符,来保证只会返回特定元素(即PECS中的生产),而不会消费任何元素(PECS中的消费)。 kotlin中的声明处变量可以相对于java中的PECS理解:可简称为CIPO。C即是Consumer,I表示in,P表示生产者,O表示out。CIPO和java中的PECS一致。

    1.3K30发布于 2019-06-24
  • 来自专栏Android开发实战

    深入理解Java泛型(二)通配符与嵌套

    PECS原则 最后简单介绍下Effective Java这本书里面介绍的PECS原则。 上界不能往里存,只能往外取,适合频繁往外面读取内容的场景。

    85310发布于 2020-07-27
  • 来自专栏Java架构师进阶

    困扰多年的Java泛型 extends T> super T>,终于搞清楚了!

    五、PECS原则 最后看一下什么是PECS(Producer Extends Consumer Super)原则,已经很好理解了。 1、频繁往外读取内容的,适合用上界Extends。

    7.4K31发布于 2019-05-31
  • 来自专栏Java与Android技术栈

    Kotlin 范型之协变、逆变

    Java 的上界通配符和下界通配符符合 PECS 原则。 PECS 原则即 Producer Extends,Consumer Super 。如果参数化类型是一个生产者,则使用 <?

    1.6K50发布于 2019-06-24
  • 来自专栏站长的编程笔记

    【说站】Java泛型中有几种通配符

    PECS原则 上界<? extends T>不能往里存,只能往外取,适合频繁往外面读取内容的场景。 下界<?

    67920编辑于 2022-11-23
  • 来自专栏狗哥的 Java 世界

    Java 泛型〈? extends T 〉和 〈? super T 〉

    五、PECS原则 最后看一下什么是PECS(Producer Extends Consumer Super)原则,已经很好理解了。 1、频繁往外读取内容的,适合用上界Extends。

    1.5K10发布于 2019-11-19
领券