JAVA8中,所谓的函数式接口,指的是在一个接口定义中,有且只有一个抽象方法。但是可以有多个非抽象的方法。
可以在这个接口上使用注解:@FunctionalInterface,如果使用该注解,接口中包含多个抽象方法,编译会报错。
java中的Runnable接口,就是一个函数式接口的例子。该接口中,只有一个抽象run方法。
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
自定义函数式接口:
@FunctionalInterface
public interface Test{
void show();
}
Lambda表达式调用:
public static void main(String[] args){
Test test =()->System.out.println("this is a functional interface");
test.show();
}
常用的函数式接口:Supplier<T>、Consumer<T>、Predicate<T>和Function<T,R>接口
接口名称 | 参数类型 | 返回结果 | 用途 |
---|---|---|---|
Supplier<T> | 无 | T | 返回类型为T的对象,get方法 |
Consumer<T> | T | void | 对类型T的对象进行处理,accept方法 |
Function<T,R> | T | R | 对类型T的对象进行操作,并返回R类型的对象,apply(T,R)方法 |
Predicate<T> | T | Boolean | 判断类型T的对象是否满足某个条件,test(T)方法。 |