Java 8默认方法如何在lambdas中运行lp?

mCs*_*mCs 25 java

据称这文章说:

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表达式和使用像新的功能接口ConsumerSupplierPredicateJDK的设计师推出的默认方法的概念,提供向后兼容性,等等,现在是比较容易切换到Java - 8而不进行任何更改。

如果您不喜欢界面中的默认实现,则可以覆盖它并提供您自己的默认实现。


JB *_*zet 16

他们间接地提供了帮助:借助,等附加方法removeIf(),您可以在集合上使用lambda stream()

如果未将这些方法作为默认方法添加,则不能在不完全破坏现有集合实现的情况下将它们添加到集合中。