Consumer介绍与实例分析
函数式接口:@FunctionalInterface
自从jdk8提供了函数式接口这一新的特性,极大地精简了java开发的方式。而在jdk8之前的版本,函数仅仅只能传递参数,而不能将一个函数或者说是行为传递过去,这意味着我们在调用某个函数时,该函数所表示的执行功能已经很明确了,对于lambda表达式来说,函数的调用,是将函数的行为传递过去,真正执行的是调用时传递的行为。@FunctionalInterface注解是标识一个接口是函数式接口。那么什么样的接口是函数式接口呢?
下面是@FunctionalInterface的注释说明:
Conceptually, a functional interface has exactly one abstract
method. Since {
@linkplain java.lang.reflect.Method#isDefault()
default methods} have an implementation, they are not abstract. If
an interface declares an abstract method overriding one of the
public methods of {
@code java.lang.Object}, that also does
<em>not</em> count toward the interface's abstract method count
since any implementation of the interface will have an
implementation from {
@code java.lang.Object} or elsewhere.
Note that instances of functional interfaces can be created with
lambda expressions, method references, or constructor references.
该注释说了,一个函数式接口应该只有一个抽象方法,对于default methods,是有一个实现,所以它们不是抽象的,这里就说明了jdk8的接口支持方法的实现。如果一个接口声明了一个抽象方法,该方法是被Object类给重写的,那么它不会为该接口的抽象方法增加,因为在Object或者别处会有一个