Java 中 lambda 表达式的作用域规则是什么?
Java 中 lambda 表达式的作用域规则有所不同。在 lambda 表达式中,this 和 super 关键字是 词法作用域 ,这意味着 this 关键字 引用封闭类型的对象,而 super 关键字 引用封闭的超类。对于 匿名类 ,它们相对于匿名类本身。类似地,lambda 表达式中声明的 局部变量 与封闭类中声明的变量冲突。对于匿名类来说,它们被允许掩盖封闭类中的变量。
示例
@FunctionalInterface interface TestInterface { int calculate(int x, int y); } class Test { public void showValue(String str) { System.out.println("The value is: " + str); } } public class LambdaExpressionTest extends Test { public static void main(String[] args) { LambdaExpressionTest lambdaObj = new LambdaExpressionTest(); lambdaObj.getResult(); } public void getResult() { TestInterface ref = (x, y) -> { // lambda expression System.out.println("The toString: " + this.toString()); super.showValue("Calling from Lambda"); return x*y; }; System.out.println("Result is: " + ref.calculate(8, 6)); } }
输出
The toString: LambdaExpressionTest6@87aac27 The value is: Calling from Lambda Result is: 48
广告