Lambda表达式与匿名内部类异同
java
it书童
2020-11-29 12:15:29
0赞
0踩
198阅读
0评论
Lambda表达式虽然是匿名内部类的一种简化,但并不能完全替代匿名内部类,两者还是有所区别的。
先看下相似之处:
-
Lambda表达式与匿名内部类一样,都可以直接访问“effectively final”的局部变量,以及外部类的成员变量(包括实例变量和类变量)
-
Lambda表达式创建的对象与匿名内部类生成的对象一样,都可以直接调用从接口中继承的默认方法
@FunctionalInterface
interface Displayable {
void display();
default int add(int a, int b) {
return a + b;
}
}
public class LambdaAndInner {
private int age = 22;
private static String name = "降龙十八掌";
public void test() {
String book = "九阴真经";
Displayable dis = () -> {
// 访问 effectively final 的局部变量
System.out.println("book 局部变量 " + book);
System.out.println("外部类的实例变量 age " + age);
System.out.println("外部类的类变量 name " + name);
};
dis.display();
// 调用 dis 对象从接口中继承的默认方法
System.out.println(dis.add(3, 5));
}
public static void main(String[] args) {
LambdaAndInner lambdaAndInner = new LambdaAndInner();
lambdaAndInner.test();
}
}
区别之处:
-
匿名内部类可以为任意接口创建实例—不管接口包含多少个抽象方法,只要匿名内部类实现所有的抽象方法即可;但Lambda表达式只能为函数式接口创建实例
-
匿名内部类可以为抽象类甚至普通类创建实例;但Lambda表达式只能为函数式接口创建实例
-
匿名内部类实现的抽象方法的方法体允许调用接口中定义的默认方法;但Lambda表达式的代码块不允许调用接口中定义的默认方法
- 上一篇: 方法引用与构造器引用
- 下一篇: Lambda表达式调用Arrays的类方法

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/910
精品付费
这一次,真正掌握composer
1598
0
个人开发者通过payjs接入微信支付
2815
0
相关推荐
java final 关键字
262
0
Java 内部类是什么
188
0
Java File 类入门介绍详解
200
0
spring 是什么及入门介绍
185
0
Eureka 详解
196
0
SpringMvc 异常处理
207
0
配置高可用的 Eureka
189
0
java线程睡眠sleep
164
0
枚举类实现接口
182
0
centos 部署多个 tomcat
110
0