【发布时间】:2018-08-15 13:30:51
【问题描述】:
我明白了,它是在接口IntStream 中定义的,但是当您编写IntStream.range(0, 200).sum(); 时,如何调用实现?它在哪里?没找到。。
【问题讨论】:
标签: java-8 stream java-stream
我明白了,它是在接口IntStream 中定义的,但是当您编写IntStream.range(0, 200).sum(); 时,如何调用实现?它在哪里?没找到。。
【问题讨论】:
标签: java-8 stream java-stream
对于每个接口,它都定义在实现该接口的具体类中。
在这种情况下,它位于java.util.stream.IntPipeline,它不是公共类。但你不应该关心这个。您只需要知道 IntStream 具有该方法,该方法执行该方法的 javadoc 所做的工作。
如果你真的对它的实现感到好奇,请查看IntPipeline.java的源代码:
return reduce(0, Integer::sum);
注意我是如何非常容易地发现的:我只是在我的 IDE 中打开 IntStream 的类型层次结构(IntelliJ,但所有像样的 IDE 都具有该功能),并注意到它有一个直接实现:IntPipeline ,其中确实包含方法。
【讨论】:
如果您使用的是合格的编译器,则可以选择显示其实现。例如,当我想查看 IntelliJ 的实现时,我单击go to implementation。然后,它会重定向。
在IntPipeLine.java,
@Override
public final int sum() {
return reduce(0, Integer::sum);
}
【讨论】: