为什么新的Spliterators
类出现在Java 8中?从Java 8开始,我们可以向接口添加static
方法。
由于Spliterators
类只有静态方法,因此在Spliterator
interface
中声明其所有方法并不简单吗?
关于Collectors/Collector
对的相同问题。
谢谢。
答案 0 :(得分:9)
这个决定完全有可能在没有考虑这种全新的可能性的情况下做出,而只是遵循既定的二十年模式。
除此之外,可以辩论向接口添加25到30个static
方法是否真的有用。为规范实现提供一些工厂是有意义的,但你应该在某处画一条线。将工厂添加到所有实现到接口是不可行的,因为它们是由同一个库提供的。但这场辩论将不合时宜。
此外,Spliterators
不仅提供static
方法,还提供嵌套类。与static
方法不同,这些类在interface
中定义时会污染每个实现类的名称空间。
Collectors
和Spliterators
也可能包含特定于实现的非public
方法甚至字段。
答案 1 :(得分:2)
不,不是好主意,因为interface
宣布合同,但是类代表逻辑。但是在Java 8中向default
添加interface
方法后,我们只能声明public
方法,但在抽象类中我们可以添加public
和private
抽象方法,所以我们仍然可以在抽象类中隐藏一些逻辑。想象一下,在实际语言水平上,您只能声明public
方法,每个人都可以改变您对e.q.的想法。 Collection
答案 2 :(得分:0)
因为接口和类之间存在差异。这两个有不同的意图。接口宣布合同。应谨慎使用接口的默认方法,例如,通过在接口中添加方法声明而不能声明xxxV2接口,无法破坏兼容性。
一个类是一个实体,它代表程序逻辑的一个单元。