函数式接口的定义
- 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
1 2 3
| public interface Runnable{ public abstract void run(); }
|
- 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
使用方法
语法和简化技巧同ES6中的箭头函数
1 2 3 4
| like = () -> { System.out.println("我喜欢lambda6"); };
|
简化技巧:
- 参数类型可以不写(默认设置为接口中的参数类型;要么全去掉,要么全加上)
- 参数列表的括号可以省略(只有仅含一个参数的时候,才可以省略)
- 方法体的大括号可以省略(只有当方法体中只有一条语句的时候,才可以省略)
案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| interface Like { void lambda(); }
class Like1 implements Like { @Override public void lambda() { System.out.println("我喜欢lambda"); } }
public class TestLambda { class Like2 implements Like { @Override public void lambda() { System.out.println("我喜欢lambda2"); } }
static class Like3 implements Like { @Override public void lambda() { System.out.println("我喜欢lambda3"); } }
public static void main(String[] args) { Like like = new Like1(); like.lambda();
like = new TestLambda().new Like2(); like.lambda();
like = new Like3(); like.lambda();
class Like4 implements Like { @Override public void lambda() { System.out.println("我喜欢lambda4"); } } like = new Like4(); like.lambda();
like = new Like() { @Override public void lambda() { System.out.println("我喜欢lambda5"); } }; like.lambda();
like = () -> { System.out.println("我喜欢lambda6"); }; like.lambda(); } }
|