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

更新时间:2020-Jul-10

446 次浏览

开启你的职业

完成课程来获取认证

开始
广告