Lambda和匿名内部类中this指向不同的对象
目录:
1. this 对象在 lambda 和 匿名内部类 中的区别
1.1 我们可以通过打印在lambda和匿名内部类中this对象的地址来验证这个对象的具体指向
public class EnumLearningTest {
// 用于 Lambda 和 匿名内部类 this 对象的比较
public final String NAME = "测试";
@Test
public void t1() {
// 错误的以为枚举还可以通过构造器进行二次构造,枚举类创建的时候就已经被构造初始化了,不能再次进行二次构造
// System.out.println(Operation.PLUS("+",1,2));
System.out.println(Operation.PLUS.applyByDoubleBinaryOperator(1, 2));
Arrays.asList(1, 2, 3).forEach(integer -> {
System.out.println("Lambda 中,关键字 this 是指外围实例:" + this);
System.out.println(this.NAME);
});
Arrays.asList(1, 2, 3).forEach(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.out.println("在匿名类中,关键字this是指匿名类实例:" + this);
System.out.println(integer);
}
});
}
}
1.2 控制台打印
Lambda 中,关键字 this 是指外围实例:com.cintsoft.ace.space.provider.EnumLearningTest@769c9116
测试
在匿名类中,关键字this是指匿名类实例:com.cintsoft.ace.space.provider.EnumLearningTest$1@6aceb1a5
1.3 参考
Effective Java 的154页
2. 什么时候使用方法引用替换Lambda表达式
1.1 原则
如果方法引用比lambda更加简短,那么就是用方法引用,否则还是使用lambda可读性会更加强。
1.2 替换示例
1.3 参考
Effective Java 的155页