我们前面介绍介绍的都是使用类实例作为载体,进一步使用类的成员方法和属性。随着近几年函数式编程的大火,JDK8 之后也引入了特性,甚至在以后的 JAVA 框架学习中,你会见到非常多函数式编程的代码。
1. 函数式接口
JAVA 中通过接口实现函数,并添加@FunctionInterface注解(不是必须的,建议加上),并通过匿名内部类来重写add抽象方法,随后便可以使用calculator.add(1, 2)进行调用:
| ```java @FunctionalInterface public interface Function { int add(int i, int j); }
// 右侧输出结果 // calculator.add(1, 2) = 3
<br />> 💡 值得注意的是,函数式接口中只能包含一个方法,否则无法使用箭头函数。| ```javapublic class Calculator {public static void main(String[] args) {Function function = new Function() {@Overridepublic int add(int i, int j) {return i + j;}};System.out.println("function.add(1, 2) = "+ function.add(1, 2));}}
| | —- | —- |
2. 箭头函数
上述示例,怎么看都还是类方法的调用,而且要写一堆匿名内部类代码的实现逻辑,好像并没有让我们的编程变得更简单。但是,JDK8 之后引入了箭头函数(也称为 Lambda 表达式),上面的代码就会变得极其简单:
| ```java public class Computer { public static void main(String[] args) { Calculator calculator = (i, j) -> {return i + j;}; System.out.println(“calculator.add(1, 2) = “
+ calculator.add(1, 2));}
}
| ```javapublic class Computer {public static void main(String[] args) {Calculator calculator = (i, j) -> i + j;System.out.println("calculator.add(1, 2) = "+ calculator.add(1, 2));}}
| | —- | —- |
注意:如果方法体内只有一个return语句,可以直接省略不写。
进一步还可以创建一个成员方法,直接接收一个函数参数,写法也是极其简单,尽管非常优雅,但是可读性不是很好。
public class Calculator {public static void func(Function function) {System.out.println(function.add(1, 2));}public static void main(String[] args) {func((i, j) -> i + j);}}
