Java 8中的Terminal Operation sum()在哪里实现?

时间:2018-08-15 13:30:52

标签: java-8 stream java-stream

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

3 个答案:

答案 0 :(得分:3)

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

在这种情况下,它位于java.util.stream.IntPipeline中,这不是公共类。但是您不应该在意这一点。您需要知道的是IntStream具有该方法,该方法执行该方法的javadoc。

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

return reduce(0, Integer::sum);

关于如何极其轻松地发现的注意事项:我只是在IDE中打开IntStream的类型层次结构(IntelliJ,但是所有不错的IDE都具有该功能),并注意到它只有一个直接实现: {1}},其中确实包含该方法。

答案 1 :(得分:1)

如果您使用的是合格的编译器,那么可以选择一个选项来显示其实现。例如,当我想查看IntelliJ的实现时,单击转到实现。然后,它重定向。

IntPipeLine.java中,

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

答案 2 :(得分:0)

无法在评论中发布图片。这就是添加新评论的原因: 所以,现在我知道了,在这里

enter image description here

但是,如果不检查所有层次结构,这并不明显,我认为可以通过更好的方式实现打包。