据称这文章说:
default在接口中引入方法的主要原因之一是增强Java 8中的Collections API以支持lambda表达式。
我可以@FunctionalInterface通过说只有一种抽象方法而由lambda代表这种特定方法,对此有所帮助。
但是这些default方法如何支持lambda?
Ful*_*Guy 37
举例说明该Collection.forEach方法的情况,该方法旨在获取Consumer功能接口的实例,并且在该Collection接口中具有默认实现:
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
Run Code Online (Sandbox Code Playgroud)
如果JDK设计人员没有引入默认方法的概念,则Collection接口的所有实现类都必须实现该forEach方法,因此在不破坏代码的情况下切换到Java-8将是有问题的。
因此,为了促进采用lambda表达式和使用像新的功能接口Consumer,Supplier,PredicateJDK的设计师推出的默认方法的概念,提供向后兼容性,等等,现在是比较容易切换到Java - 8而不进行任何更改。
如果您不喜欢界面中的默认实现,则可以覆盖它并提供您自己的默认实现。
JB *_*zet 16
他们间接地提供了帮助:借助,等附加方法removeIf(),您可以在集合上使用lambda stream()。
如果未将这些方法作为默认方法添加,则不能在不完全破坏现有集合实现的情况下将它们添加到集合中。