您何时以及为何使用 Java 的供应商和消费者接口?

2024-02-18

作为一名学习 Java 的非 Java 程序员,我正在阅读Supplier and Consumer目前的接口。我无法理解它们的用法和含义。

您何时以及为何使用这些接口?有人可以给我一个简单的外行例子吗?

我发现文档示例对于我的理解来说不够简洁。


您难以理解函数式接口(例如中的接口)的含义的原因java.util.function就是这里定义的接口没有任何意义!他们的出现主要是为了代表结构, not 语义.

这对于大多数 Java API 来说是不典型的。典型的 Java API(例如类或接口)具有意义,您可以为其所代表的内容开发一个思维模型,并使用它来理解其上的操作。考虑java.util.List例如。 AList是其他对象的容器。它们有一个序列和一个索引。列表中包含的对象数量由以下命令返回size()。每个对象的索引范围为 0..size-1(含)。索引处的对象i可以通过调用来检索list.get(i)。等等。

中的功能接口java.util.function没有任何这样的意义。相反,它们是仅仅代表结构函数的属性,例如参数的数量、返回值的数量以及(有时)参数或返回值是否是原语。因此我们有类似的东西Function<T,R>它表示一个采用单个类型参数的函数T并返回一个类型的值R。就是这样。该功能有什么作用?好吧,它可以做任何事情......只要它接受单个参数并返回单个值。这就是为什么规范Function<T,R>只不过是“表示一个接受一个参数并产生一个结果的函数”。

显然,当我们编写代码时,它是有意义的,而这种意义必须来自某个地方。就功能接口而言,其含义来自使用它们的上下文。界面Function<T,R>孤立起来没有任何意义。然而,在java.util.Map<K,V>API,有以下内容:

V computeIfAbsent(K key, Function<K,V> mappingFunction)

(为简洁起见,省略了通配符)

啊这个用Function是作为“映射函数”。那有什么作用?在这种背景下,如果key如果映射中尚不存在,则调用映射函数并将键传递给该函数,并期望生成一个值,并将生成的键值对插入到映射中。

所以你不能看规格Function(或任何其他功能接口,就此而言)并尝试辨别它们的含义。您必须查看它们在其他 API 中的使用位置才能理解它们的含义,并且该含义仅适用于该上下文。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您何时以及为何使用 Java 的供应商和消费者接口? 的相关文章

随机推荐

  • 带有通配符领域的 Google 联合登录(混合 OpenID+OAuth)

    我正在尝试实施 Google 的OpenID OAuth https developers google com accounts docs OpenID oauth协议 当 openid realm 包含通配符时它不起作用 openid
  • 带有石英的自定义 UIBarButtonItem

    如何用石英绘制一个与 UIBarButtonItem 风格完全相同的按钮 按钮应该能够显示不同的颜色 我下载了Three20项目 但是这个项目非常复杂 你需要很多时间才能忽略整个框架 我只想绘制一个自定义 UIBarButtonItem 感
  • 为 azure blob 存储终结点配置自定义域名

    我正在关注有关如何为 Blob 存储端点配置自定义域的说明 https learn microsoft com en us azure storage blobs storage custom domain name register a
  • 电子邮件验证 MX 查找

    我被要求在网络应用程序上实现一些电子邮件地址验证 我相信我们都已经经历过一千次了 但是 这一次我被要求在域上进行 MX 查找 看看是否它接受电子邮件 有谁知道这样做有任何潜在的问题吗 mx 查找是确定域是否接受电子邮件的可靠方法吗 是否存在
  • 如何在我的本地仓库 Maven 中下载并安装 jar

    我正在尝试在 tomcat 下下载一个用于内部存储库的 jar 然后将其安装到我的本地 Maven 存储库 jar 文件可以在下面找到path http 10 11 250 14 strepo ext JSErrorCollector 0
  • 如何正确使用CSS媒体查询进行响应式设计

    我有媒体查询方面的问题 我想要我的主线div宽度为 960 像素 但如果屏幕小于 960 像素 我希望它是任何当前宽度的 80 我只从 960px 中得到 80 而不是从更小的所有东西中得到 80 例如 800px 的 80 700px 的
  • Opencv - 灰度模式与灰度颜色转换

    我正在 opencv 2 4 11 python 2 7 中工作 并正在处理灰色图像 在灰度模式下加载图像并将图像从 BGR 转换为灰度时 我发现了异常行为 以下是我的实验代码 import cv2 path some path to co
  • 为什么 android ImageSpan 会显示我的图片两次(当 setBounds 超过特定的魔法宽度时)?

    这是我将 ImageSpan 放入 EditText 中的代码 public void onActivityCreated Bundle savedInstanceState super onActivityCreated savedIns
  • Swift 2 Tapgesture 中无法识别的选择器

    我最近开始将我的应用程序更新到 Swift 2 0 但我遇到了一个问题 该问题在 SO 上有一百个不同的答案 但似乎都与我的问题无关 这在将应用程序更新到 Swift 2 0 之前有效 但我无法找到对点击手势识别器所做的任何更改 这是我收到
  • 无法将“string”隐式转换为“System.TypeCode”

    只是想知道是否有人知道如何修复这个错误 我也用过TypeCode 但仍然没有运气 谢谢 case typeof Nullable
  • c 获取整数的第n个字节

    我知道你可以通过使用获得第一个字节 int x number 1 lt lt 8 1 or int x number 0xFF 但我不知道如何获取整数的第 n 个字节 例如 1234 为 32 位整数 00000000 00000000 0
  • git-stitch-import:如何创建一个主分支?

    我正在尝试将多个 git 存储库合并到一个新存储库中 每个旧存储库作为新存储库中的子目录 git stitch repo 似乎是我想要的工具 但是 文档不太清楚 我能够遵循它 https metacpan org pod distribut
  • this()在Java中意味着什么[重复]

    这个问题在这里已经有答案了 什么是this 在Java中是什么意思 看起来只有放置时才有效 this 在类变量区中 有人对此有想法吗 Thanks 这意味着您正在从另一个构造函数调用默认构造函数 它必须是第一个语句 如果有 则不能使用 su
  • 如何在 Android 中制作 FM 收音机应用程序 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 这只是出于好奇 有什么办法可以让我们调频广播应用程序适用于 Android 设备 我知道这是可能的 因
  • 对象默认的stringify,相当于Java的toString?

    我刚刚看了 dart 的 3 教程 创建了评级组件 我想知道在字符串化对象时是否调用相同的方法 类似于Java的toString 例如 MyClass myObject new MyClass System out println myOb
  • 如何编写正确的静态方法 - 多线程安全

    因为我认为静态方法不应该像第一个片段那样编写 还是我错了 public static class ExtensionClass private static SomeClass object1 private static StringBu
  • 使用 msiexec 和 c# 安装 msi

    在静默模式下在 C 应用程序中安装 msi 的最佳方法是什么 我想使用 msiexec 安装 msi 文件 但我不知道如何执行此操作 问题是使用 msiexec 和 qn 时 您必须在 cmd exe 进程中运行它 以 以管理员身份 启动
  • laravel 中会话超时或过期后触发函数

    我有一个关于身份验证的问题 我的身份验证控制器中有以下功能 public function signout set logged in status to zero in database l Login where user id Ses
  • 一页上有多个谷歌地图

    在一页上显示多个实体 每个实体都有一个谷歌地图 这就是我处理仅显示一个实体的地图的方式 var map var geocoder document ready function google maps event addDomListene
  • 您何时以及为何使用 Java 的供应商和消费者接口?

    作为一名学习 Java 的非 Java 程序员 我正在阅读Supplier and Consumer目前的接口 我无法理解它们的用法和含义 您何时以及为何使用这些接口 有人可以给我一个简单的外行例子吗 我发现文档示例对于我的理解来说不够简洁