在 Lambda 表达式中, 访问外层作用域和以前版本的匿名对象中的方式类似。 可以直接访问标记了 final
的外层局部变量、 对象的字段与静态变量。
- 访问局部变量
在 Lambda 表达式中, 直接访问外层的局部变量。
与匿名对象不同的是, 变量 number 可以不声明为 final。
代码如下:
package test;
public class Lambda {
public static void main(String[] args) {
int number = 6;
InterNew<Integer,String>inn = (t) -> String.valueOf(t + number);
System.out.println("访问局部变量:"+inn.InterNew(7));
}
}
interface InterNew<String, Integer> {
Integer InterNew(String string);
}
运行结果:
访问局部变量:13
- 访问对象字段与静态变量
在 Lambda 表达式中修改变量 number 同样是不允许的。 与本地变量不同, Lambda 表达式内部对于对
象的字段以及静态变量是即可读又可写, 这与匿名对象是相同的。
访问对象字段与静态变量。
package test;
public class Lambda {
public static int sNum;
public int num;
public void varTest() {
InterNew<Integer, String> is = (t) -> {
num = 56; // 成员变量
return String.valueOf(t);
};
System.out.println(is);
InterNew<Integer, String> is2 = (t) -> {
sNum = 98; // 静态变量
return String.valueOf(t);
};
System.out.println(is2);
}
public static void main(String[] args) {
Lambda l = new Lambda();
l.varTest();
}
}
运行结果:
test.LambdaKaTeX parse error: Can't use function '$' in math mode at position 7: Lambda$̲1/791452441@1c2…Lambda$2/531885035@816f27d