当前位置: 首页 > 面试题库 >

什么是PECS(生产者扩展了超级消费者)?

殷安顺
2023-03-14
问题内容

在阅读泛型时,我遇到了PECS(生产者extends和消费者的super缩写)。

有人可以向我解释如何使用PECS解决extends和之间的混淆super吗?


问题答案:

tl; dr: “ PECS”是从集合的角度来看的。如果仅从通用集合中提取项目,则它是生产者,应使用extends; 如果您仅将物品塞入其中,则它是消费者,应该使用super。如果您都使用同一集合,则不应使用extends或super。

假设您有一个方法以事物的集合为参数,但是您希望它比只接受一个更加灵活Collection

情况1:您想浏览集合并为每个项目做事。
然后列表是生产者,因此您应该使用Collection<? extends Thing>

原因是a Collection<? extends Thing>可以包含的任何子类型Thing,因此每个元素Thing在执行操作时都将表现为a 。(实际上,您无法将任何内容添加到中Collection<? extends Thing>,因为您无法在运行时知道该集合包含哪种特定的子类型Thing。)

情况2:您想向集合中添加东西。
那么列表是一个消费者,因此您应该使用Collection<? super Thing>

这里的理由是,与不同Collection<? extends Thing>,无论实际的参数化类型是什么,Collection<? super Thing>都可以始终保持Thing。在这里,您不必关心列表中已经存在的内容,只要Thing可以添加即可。这就是? super Thing保证。



 类似资料:
  • 我想设计一个解决方案,用于向多个提供商发送不同类型的电子邮件。总体概述。 我有几个上游提供商Sendgrid、Zoho、Mailgun等。它们将用于发送电子邮件等。例如: 注册新用户的电子邮件 删除用户的电子邮件 空间配额限制的电子邮件 (一般大约有6种类型的电子邮件) 每种类型的电子邮件都应该生成到生产者中,转换为序列化Java对象,并发送到与上游提供商集成的适当的Kafka消费者。 问题是如何

  • 本文向大家介绍请介绍一下什么是生产者消费者模式?相关面试题,主要包含被问及请介绍一下什么是生产者消费者模式?时的应答技巧和注意事项,需要的朋友参考一下 生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。 优点:支持并发、解耦。

  • 我对Kafka比较陌生。我对它做了一些实验,但有一些东西对我来说是不清楚的关于消费者抵消。根据我到目前为止的理解,当使用者启动时,它将从其开始读取的偏移量由配置设置确定(如果我错了,请更正)。 现在举个例子,在主题中有10条消息(偏移0到9),一个消费者碰巧在它关闭之前(或者在我杀死消费者之前)消费了其中的5条消息。然后假设我重新启动消费者进程。我的问题是: > 如果设置为,是否总是从偏移量0开始

  • 本教程演示了如何发送和接收来自Spring Kafka的消息。 首先创建一个能够发送消息给Kafka主题的Spring Kafka Producer。 接下来,我们创建一个Spring Kafka Consumer,它可以收听发送给Kafka主题的消息。使用适当的键/值序列化器和解串器来配置它们。 最后用一个简单的Spring Boot应用程序演示应用程序。 下载并安装Apache Kafka 要

  • 生产者线程与消费者线程使用信号量同步 生产者线程与消费者线程使用信号量同步 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-08-24 yangjie the f

  • 所谓的生产者消费者模型就是 某个模块(函数)负责生产数据,这些数据由另一个模块来负责处理 一般生产者消费者模型包含三个部分 生产者、缓冲区、消费者 为什么生产者消费者模型要含三个部分?直接生产和消费不行么? 一个案例说明一切 生产者好比现实生活中的某个人 缓冲区好比现实生活中的邮箱 消费者好比现实生活中的邮递员 如果只有生产者和消费者, 那么相当于只有写信的人和邮递员,那么如果将来过去的邮递员离职