为什么我们在Java 8中有单独的Spliterators类?

时间:2017-01-26 08:17:40

标签: java java-8 java-stream

为什么新的Spliterators类出现在Java 8中?从Java 8开始,我们可以向接口添加static方法。 由于Spliterators类只有静态方法,因此在Spliterator interface中声明其所有方法并不简单吗?

关于Collectors/Collector对的相同问题。

谢谢。

3 个答案:

答案 0 :(得分:9)

这个决定完全有可能在没有考虑这种全新的可能性的情况下做出,而只是遵循既定的二十年模式。

除此之外,可以辩论向接口添加25到30个static方法是否真的有用。为规范实现提供一些工厂是有意义的,但你应该在某处画一条线。将工厂添加到所有实现到接口是不可行的,因为它们是由同一个库提供的。但这场辩论将不合时宜。

此外,Spliterators不仅提供static方法,还提供嵌套类。与static方法不同,这些类在interface中定义时会污染每个实现类的名称空间。

CollectorsSpliterators也可能包含特定于实现的非public方法甚至字段。

答案 1 :(得分:2)

不,不是好主意,因为interface宣布合同,但是类代表逻辑。但是在Java 8中向default添加interface方法后,我们只能声明public方法,但在抽象类中我们可以添加publicprivate抽象方法,所以我们仍然可以在抽象类中隐藏一些逻辑。想象一下,在实际语言水平上,您只能声明public方法,每个人都可以改变您对e.q.的想法。 Collection

答案 2 :(得分:0)

因为接口和类之间存在差异。这两个有不同的意图。接口宣布合同。应谨慎使用接口的默认方法,例如,通过在接口中添加方法声明而不能声明xxxV2接口,无法破坏兼容性。

一个类是一个实体,它代表程序逻辑的一个单元。