Java中lambda表达式的作用域规则是什么?

Java中的lambda表达式有不同的作用域规则。在lambda表达式中,this 和super 关键字在词法上是范围内的,这意味着该关键字 引用了封闭类型的对象,而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

以上是 Java中lambda表达式的作用域规则是什么? 的全部内容, 来源链接: utcz.com/z/338570.html

回到顶部