函数式接口

函数式编程的最大优点是不会发生死锁,因为没有变量,都是语句。所以务必重视接下来的函数式接口的学习

函数式接口:有且仅有一个抽象方法的接口

Lambda表达式的前提:必须要有接口,并且要求接口中有且仅有一个抽象方法

 

Java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可以适用于Lambda使用的接口,只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利进行推导

简单理解就是:函数式接口是适用于Lambda表达式的接口

函数式接口可以用作方法的参数传递、局部变量

 

如何检测一个接口是不是函数式接口呢,使用注解@FunctionalInterface即可,如下 1、@FunctionalInterface 2、放在接口定义的上方:如果接口是函数式接口,编译通过;如果不是,编译失败

 

注意:我们自己定义函数式接口的时候,@FunctionalInterface是可选的,就算我不写这个注释,只要保证满足函数式接口定义的条件,也照样是函数式接口。但是,建议加上该注解

 

函数式接口的练习

 

函数式接口_作为方法的参数

需求: 定义一个测试类,在测试类里面定义一个方法startThread(Runnable r),startThread方法的参数是一个函数式接口, 最后在测试类里面的main方法里面调用startThread方法

如果方法的参数是一个函数式接口,我们可以使用Lambda作为参数传递

 

函数式接口_作为方法参数的练习

 

函数式接口_作为方法的返回值

需求: 定义一个测试类,在测试类里面定义一个方法Comparator getComparator(),方法的返回值Comparator是一个函数式接口, 最后在测试类里面的main方法里面调用getComparator()方法

如果方法的返回值是一个函数式接口,我们可以使用Lambda表达式作为结果返回

 

函数式接口_作为方法返回值的练习