【问题标题】:What are the differences between an aggregate operation and a method?聚合操作和方法之间有什么区别?
【发布时间】:2015-06-13 22:46:23
【问题描述】:

.......

好吧,让我告诉你我犯了一些错误:我所指的 foreach() 不是聚合操作,而是来自 Iteable 的方法。我已更改问题的标题及其内容。

我的兴趣是了解聚合操作是否默认实现以及我在哪里可以找到该实现。

【问题讨论】:

  • 如果你想找到Java 8 API的源代码,你可以看这里:download.java.net/openjdk/jdk8否则,你的问题有点不清楚。
  • 你应该配置你的IDE来加载src.zip作为JDK的源代码,这样你就可以通过“开放声明”或类似的特性直接从你自己的代码中跳转到代码中。
  • 我试图上传图片来澄清问题,但由于我的水平我不能
  • 顺便说一下,感谢您对问题的评论

标签: java-8 default-implementation


【解决方案1】:

如果您想深入了解 JDK 源代码,您可以随时按照@jbkm 的建议下载它们here。如果您安装了 Oracle JDK,则安装文件夹中应该有 src.zip 文件,其中包含所有公共源。或者,您可以在线查看 OpenJDK 源代码,例如 GrepCode。可以看到,forEachIterable 的实现非常简单:

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}

如果您要询问 forEach 在 Stream API 中的实现,那就更棘手了,因为它应该评估所有先前的管道步骤并为并行流并行执行操作。您可以开始调查检查 ReferencePipeline 类,它是 OpenJDK 中的 Stream 实现。

【讨论】:

  • oracle 网站的字面意思是:“默认实现的行为就像:for (T t : this) { action.accept(t); }”。我想知道这里是否有不同的代码而不是示例代码,或者它是否是您在上面发布的代码,带有附加行 - Objects.requireNonNull(action); - 作为它的一部分。
  • @user3727894:文档并没有强制要求特定的实现,因此,没有给你保证,而只是指定的行为。另一种兼容的实现是iterator().forEachRemaining(action);
猜你喜欢
  • 1970-01-01
  • 2015-06-12
  • 2021-11-02
  • 2011-12-20
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
相关资源
最近更新 更多