我们前面介绍介绍的都是使用类实例作为载体,进一步使用类的成员方法和属性。随着近几年函数式编程的大火,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 />> 💡 值得注意的是,函数式接口中只能包含一个方法,否则无法使用箭头函数。
| ```java
public class Calculator {
public static void main(String[] args) {
Function function = new Function() {
@Override
public 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));
}
}
| ```java
public 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);
}
}