Java 8 高级类设计:接口新特性与 Lambda 函数
1. Java 8 接口的新特性
在 Java 8 之前,接口只能声明抽象方法,为了支持 lambda 函数,Java 8 对接口进行了重大改变,引入了默认方法和静态方法。
1.1 默认方法
默认方法是使用 default
关键字定义且带有方法体的实例方法。在默认方法内部, this
关键字指向声明该方法的接口,并且默认方法可以调用其所在接口中的其他方法。
Java 8 引入默认方法的主要原因是为了支持 lambda 表达式,同时让接口的演化更加容易。在 Java 8 之前,如果在现有接口中添加新方法,会破坏实现该接口的类,因为这些类没有定义这个新方法。而有了默认方法,就可以更轻松地扩展接口。
例如, java.lang.Iterable
接口在 Java 8 之前只有一个方法 Iterator<T> iterator();
,Java 8 为其扩展了 forEach
和 spliterator
方法,为了避免破坏实现该接口的类,这两个方法被定义为默认方法。以下是 Iterable
接口的定义:
public interface Iterable<T> {
Iterator<T> iterator();
default void forEac