【问题标题】:Where is the Terminal Operation sum() implemented in Java 8?Java 8 中实现的终端操作 sum() 在哪里?
【发布时间】:2018-08-15 13:30:51
【问题描述】:

我明白了,它是在接口IntStream 中定义的,但是当您编写IntStream.range(0, 200).sum(); 时,如何调用实现?它在哪里?没找到。。

【问题讨论】:

    标签: java-8 stream java-stream


    【解决方案1】:

    对于每个接口,它都定义在实现该接口的具体类中。

    在这种情况下,它位于java.util.stream.IntPipeline,它不是公共类。但你不应该关心这个。您只需要知道 IntStream 具有该方法,该方法执行该方法的 javadoc 所做的工作。

    如果你真的对它的实现感到好奇,请查看IntPipeline.java的源代码:

    return reduce(0, Integer::sum);
    

    注意我是如何非常容易地发现的:我只是在我的 IDE 中打开 IntStream 的类型层次结构(IntelliJ,但所有像样的 IDE 都具有该功能),并注意到它有一个直接实现:IntPipeline ,其中确实包含方法。

    【讨论】:

      【解决方案2】:

      如果您使用的是合格的编译器,则可以选择显示其实现。例如,当我想查看 IntelliJ 的实现时,我单击go to implementation。然后,它会重定向。

      IntPipeLine.java

      @Override
          public final int sum() {
              return reduce(0, Integer::sum);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-01
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        • 2020-10-06
        • 2012-10-06
        • 2020-10-07
        • 2023-01-19
        相关资源
        最近更新 更多