在lambda表达式中访问外层作用域和老版本中的匿名对象中的方式相似;
可以直接访问标记了final的外层局部变量,或者实例字段以及静态变量。
要求局部变量必须是被final修饰的。
举例:
1.接口
package com._08lambda3;
public interface ITestService {
void test();
}
2.测试类
package com._08lambda3;
/**
* @Package: com._05annoymousObject
* @ClassName: Test
* @Description: <p>Description: </p>
* @author: zq
* @since: 2020/5/5 22:32
* @version: 1.0
* @Copyright: 2020 zq. All rights reserved.
*/
public class Test {
public static void main(String[] args) {
//在lambda表达式中访问外层作用域和老版本中的匿名对象中的方式相似;
//可以直接访问标记了final的外层局部变量,或者实例字段以及静态变量。
//要求局部变量必须是被final修饰的。
int a = 9;
//因为a在下面的匿名内部类中被调用,所以被自动修饰为final类型的了。
//匿名对象方法,一次编写一次使用,面向过程编程
ITestService service = new ITestService() {
@Override
public void test() {
System.out.println(a);
}
};
service.test();
final int b = 9;
//使用lambda表达式的写法:常规写法
ITestService service2 = () -> {
System.out.println(b);
};
service2.test();
//使用lambda表达式的写法:简写
//1、无参无返回值,有方法体
final int c = 9;
ITestService service3 = () -> System.out.println(c);
service3.test();
}
}