我在阅读非专利药时遇到了PEC(Producer 100 and Consumer 101的缩写).

有没有人能给我解释一下在extends点到10点之间怎么用PECS来解析念力?

推荐答案

tl;dr:"PECS"是从该系列的Angular 来看的.如果你要从一个普通的Collection 中提取only件物品,它是制作人,你应该使用extends件;如果你是only个填充项目,它是一个消费者,你应该使用super.如果使用同一个集合同时使用这两种方法,则不应使用extendssuper.


假设你有一个方法,它的参数是一组东西,但你希望它比只接受Collection<Thing>更灵活.

Case 1: You want to go through the collection and do things with each item.
Then the list is a producer, so you should use a Collection<? extends Thing>.

理由是Collection<? extends Thing>可以包含Thing的任何子类型,因此当您执行操作时,每个元素都将表现为Thing.(您实际上不能向Collection<? extends Thing>添加任何内容(除了NULL),因为您不能在运行时知道集合持有Thing的哪个specific子类型.)

Case 2: You want to add things to the collection.
Then the list is a consumer, so you should use a Collection<? super Thing>.

这里的理由是,与Collection<? extends Thing>不同,Collection<? super Thing>始终可以容纳Thing,而不管实际的参数化类型是什么.在这里,你不在乎列表中已经有什么,只要它允许添加Thing;这就是我所保证的.

Java相关问答推荐

OpenRewriter-如何替换连锁/流畅方法调用中的方法?

将@ManyToOne JPA Composite Key用作Id保存实体添加额外参数

ActivityCompat.请求收件箱自动拒绝权限

填写文本字段后锁定PDF

RESTful框架类字段是安全的还是不安全的

将不受支持的时区UT重写为UTC是否节省?

与Spring Boot相关的实体未正确保存

通过Spring Security公开Spring Boot执行器端点

Arrays.hashcode(int[])为不同的元素提供相同的散列

匹配一组字符或另一组字符

try 在Android Studio中的infoWindow中使用EditText(Java)

如何将Java文档配置为在指定的项目根目录中生成?

在Spring Boot应用程序中,server.port=0的默认端口范围是多少?

如何生成指定范围内的11位序列号?

向Java进程发送`kill-11`会引发NullPointerException吗?

在不使用instanceof或强制转换的情况下从父类变量调用子类方法

持续时间--为什么在秒为负数的情况下还要做额外的工作?

Java System.getProperty在哪里检索user.home?

Java泛型方法重载

URI构造函数错误?