1. lambda解决的问题:
- java不能函数式编程
- java匿名内部类只能单线程运行
- 匿名内部类缺陷:
- 语法复杂
- this容易混淆
- 不能引用外部变量
- 不能抽象化来控制流程
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);
};
r.run();
}
}
![image.png](https://i-blog.csdnimg.cn/blog_migrate/1c18b60352728b0f8704f48995aa1012.webp?x-image-process=image/format,png)
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);
}
}.message("用匿名内部类调用自定义的接口");
Message m = (String msg) -> {
System.out.println(msg);
};
m.message("lambda 调用自定义接口");
}
static interface Message {
void message(String msg);
}
}
![image.png](https://i-blog.csdnimg.cn/blog_migrate/46905c40ae1c84c68019446dd8a32dd2.webp?x-image-process=image/format,png)