为什么在Java8中有单独的拆分器类?
为什么新的为什么在Java8中有单独的拆分器类?,java,java-8,java-stream,Java,Java 8,Java Stream,为什么新的拆分器出现在Java8中?自Java8以来,我们可以向接口添加静态方法。 由于Spliterator类只有静态方法,所以在Spliterator接口中声明其所有方法不会更简单 关于Collector/Collectorpair的相同问题 谢谢。因为接口和类之间有区别。这两个人有不同的意图。接口声明了一个契约。应该谨慎使用接口的默认方法,例如,不能通过在接口中添加方法声明来破坏兼容性,也不能声明xxxV2接口 类是一个实体,它表示程序逻辑的一个单元。不,这不是一个好主意,因为接口声明了一
拆分器出现在Java8中?自Java8以来,我们可以向接口添加静态方法。
由于Spliterator
类只有静态方法,所以在Spliterator
接口中声明其所有方法不会更简单
关于Collector/Collector
pair的相同问题
谢谢。因为接口和类之间有区别。这两个人有不同的意图。接口声明了一个契约。应该谨慎使用接口的默认方法,例如,不能通过在接口中添加方法声明来破坏兼容性,也不能声明xxxV2接口
类是一个实体,它表示程序逻辑的一个单元。不,这不是一个好主意,因为接口声明了一个契约,而类表示逻辑。但是在Java8中将default
方法添加到interface
之后,我们只能声明public
方法,但是在抽象类中我们可以添加public
和private
抽象方法,所以我们仍然可以在抽象类中隐藏一些逻辑。想象一下,在实际的语言层面上,你只能声明public
方法,每个人都可以改变你对e.q.收藏的想法完全有可能这个决定是在没有考虑这个全新的可能性的情况下做出的,而只是遵循二十年来的既定模式
除此之外,在接口中添加25到30个static
方法是否真的有用还有争议。为规范化实现提供一些工厂是有意义的,但是您应该在某个地方划一条线。将工厂添加到接口的所有实现中是不可行的,因为它们是由同一个库提供的。但这场辩论将偏离主题
此外,Spliterators
不仅提供了静态方法,还提供了嵌套类。与静态
方法不同,这些类在接口
中定义时会污染每个实现类的名称空间
收集器
和拆分器
也可能包含特定于实现的非
公共
方法甚至字段。关于污染的推理是我在您的回答中最喜欢的。1+我同意,并且我要补充:看到“可靠”原则,它将打破S:单一责任原则和I接口隔离原则注:接口中允许私有方法,因为9是的,现在Java 8是主要语言级别:)