Lambda表达式

函数式接口的定义

  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
1
2
3
public interface Runnable{
public abstract void run();
}
  • 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象

使用方法

语法简化技巧ES6中的箭头函数

1
2
3
4
// 6.用Lambda简化(接口必须是函数式接口)
like = () -> { // like是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
// 1.定义一个函数式接口
interface Like {
void lambda();
}

// 2.普通类实现接口
class Like1 implements Like {
@Override
public void lambda() {
System.out.println("我喜欢lambda");
}
}

public class TestLambda {
// 3.非静态内部类(对外不直接可见,必须有一个外部类的引用才能被创建)
class Like2 implements Like {
@Override
public void lambda() {
System.out.println("我喜欢lambda2");
}
}

// 4.静态内部类(对外直接可见,可以直接创建对象)
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();

// 4.局部内部类
class Like4 implements Like {
@Override
public void lambda() {
System.out.println("我喜欢lambda4");
}
}
like = new Like4();
like.lambda();

// 5.匿名内部类(没有类名,必须借助接口或者父类)
like = new Like() {
@Override
public void lambda() {
System.out.println("我喜欢lambda5");
}
};
like.lambda();

// 6.用Lambda简化(接口必须是函数式接口)
like = () -> {
System.out.println("我喜欢lambda6");
};
like.lambda();
}
}
Contents
  1. 1. 函数式接口的定义
    1. 1.1. 使用方法
    2. 1.2. 案例
|