forked from fantj2016/java-reader
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjava8-lambda.md
More file actions
70 lines (61 loc) · 1.9 KB
/
java8-lambda.md
File metadata and controls
70 lines (61 loc) · 1.9 KB
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
67
68
69
####1. lambda解决的问题:
* java不能函数式编程
* java匿名内部类只能单线程运行
* 匿名内部类缺陷:
1. 语法复杂
2. this容易混淆
3. 不能引用外部变量
4. 不能抽象化来控制流程
####2. Lambda实现匿名内部类
* 在lambda中,可以使用方法内部变量 ,但是不能改变它的值(i++报错)
```
package com.fantJ.JAVA_8;
/**
* Created by Fant.J.
* 2017/12/12 20:58
*/
public class Lambda_Runnable {
public static void main(String[] args) {
new Runnable(){
@Override
public void run(){
System.out.println("匿名内部类实现Runnable接口");
}
}.run();
int i = 1;
Runnable r=()->{
System.out.println("lambda实现Runnable接口");
System.out.println("i="+i); //测试是否可以使用方法内部变量 (匿名内部类只可以使用常量)
//i++; //报错
};
r.run();
}
}
```

####3. Lambda实现自定义接口
```
package com.fantJ.JAVA_8;
/**
* Created by Fant.J.
* 2017/12/12 21:11
*/
public class Lambda_Interface {
public static void main(String[] args) {
new Message() {
@Override
public void message(String msg) {
System.out.println(msg); //打印传参 msg
}
}.message("用匿名内部类调用自定义的接口");
Message m = (String msg) -> {
System.out.println(msg);
};
m.message("lambda 调用自定义接口");
}
static interface Message {
void message(String msg);
}
}
```
