Functional interfaces
Functional interfaces是只包含有一个由abstrac修饰的抽象方法的接口。依据Java8规范,interface如果遵循以下规则即为Functional interface:
- 一个Functional Interface可以拥有任意数量的由default method,和一个 abstract method。Default method是java8中新增加的由default修饰的方法。
- 如果一个interface继承了另外一个functional interface,并且本身没有再声明其他的方法,那么这个interface也是一个functional interface。
- @FunctionalInterface 注解用来让编译器检查一个interface是否是一个有效的functional interface。但是一个functional interface并不必要使用此注解来修饰。
- 除了一个abstract method,functional interface还可以将Object类中的任何方法声明为抽象方法。
- functional interface以前叫做Single Abstract Method Interface(SAMI),单抽象方法接口。
- java.lang.Runnable, java.awt.event.ActionListener, java.util.Comparator, java.util.concurrent.Callable都是functional interfaces。
下面是Java API中的一些示例:
Runnable和Comparator接口都是functional interface:
Runnable.java
interface Runnable { void run(); }
Comparator.java
interface Comparator<T> { boolean equals(Object obj); int compare(T o1, T o2); }
Defender Methods
为了添加Lambdas表达式,添加了default修饰,可以在interface中写方法的实现。
Lambdas表达式
将匿名内部类,抽象成Lambda表达式,简化语法,增强语义(this指向当前类,而不是匿名内部类)。