Java函数式接口
函数式接口概括
Java函数式接口是JDK 8引入的新特性,首先,要明白其是一个接口,但一个接口并不一定是函数式接口,要满足一个接口接口是函数式接口,须满足如下两点:
1、 接口需要加上@FunctionalInterface注解
2、 接口中有且只有一个抽象方法
JDK 8中所有有关函数式接口都在java.util.function这个包中,其中比较常见的有:
1、 Function: 既有输入参数又有输出参数,其接口方法定义如下:
R apply(T t);
2、 Supplier:有输入参数无输出参数,其接口方法定义如下:
T get();
3、 Consumer: 无输入参数,有输出参数,其接口方法定义如下:
void accept(T t);
函数式接口自定义
通过上节,我们知道了要自定义一个函数式接口满足的条件,就可以自定义一个接口,如下所示:
@FunctionalInterface // step 1、 引入FunctionalInterface注解
public interface OrgFunction {
int getInfo(String str); // step 2、 声明一个有且仅有一个抽象方法
}
定义完一个抽象接口,就可以通过Lambda表达式使用上述接口,如下所示:
public class OrgTest {
public static void main(String[] args) {
OrgFunction org = (String o)-> { //参数类型是可以省略掉
return o.length();
} ;
System.out.println(org.getInfo("hello"));
}
}
使用函数式接口的好处
使用函数式接口的一个最大好处是可以简化编程,在JDK 8之前,在没有子类情况下,如果实例化一个接口,只能通过用匿名类的方式实现。如要实例化OrgFunction接口,只能通过用一个匿名类的方式实现,代码如下所示:
public class OrgTest{
public static void main(String[] args){
OrgFunction org = new OrgFunction(){
@override
public int getInfo(String str){
return str.length;
}
};
org.getInfo("Hello World!");
}
}