java - Java 8默认方法如何与lambdas一起使用?

在这个文章中,它的声明是:

default 方法引入接口中的主要原因之一是,增强 Java 8中的集合API以支持lambda表达式。

我可以理解,@FunctionalInterface 有助于说明只有一个抽象方法,lambda应该表示这种特定方法。

但是 default 方法是如何帮助支持lambda的?

时间:

为了给你一个例子,采用 Collection.forEach 方法的例子,它设计为采取 Consumer 函数接口的实例并在 Collection 接口中实现:


default void forEach(Consumer<? super T> action) {


 Objects.requireNonNull(action);


 for (T t : this) {


 action.accept(t);


 }


}



如果JDK设计者没有引入默认方法的概念,那么Collection接口的所有实现类都必须实现forEach方法,因此在不破坏代码的情况下切换到Java-8会有问题。

所以lambdas采用 lambdas ConsumerSupplierPredicate 等新功能接口,设计器引入默认方法,以提供向后兼容性,无需进行任何更改,就可以向 Java - 8提供反向兼容。

如果你不喜欢接口中的默认实现,你可以重写它并提供你自己的。

他们间接帮助:由于其他方法如 removeIf()stream() 等,你可以在集合上使用 lambdas 。

如果没有将已经有的Collection 实现作为默认方法添加,那么这些方法不能被添加到集合中。

...