Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在Java8中有单独的拆分器类?_Java_Java 8_Java Stream - Fatal编程技术网

为什么在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是主要语言级别:)