Java中lambda表达式中的局部变量的规则是什么?

一个拉姆达表达式可以捕获像变量本地和匿名类。换句话说,它们对封闭范围的局部变量具有相同的访问权限。对于lambda表达式中的局部变量,我们需要遵循一些规则。

  • Lambda表达式无法像匿名内部类一样定义任何新范围,因此我们无法声明与Lambda表达式的封闭范围中已声明的局部变量相同的局部变量。

  • 在lambda表达式内部,我们无法将任何值分配给在lambda表达式外部声明的某些局部变量。因为在lambda表达式外部声明的局部变量可以是final或有效的final。

  • 最终规则或有效最终规则也适用于方法参数和异常参数。

  • 在这个和超级lambda表达式体内引用是与它们的闭合范围。因为lambda 表达式无法定义任何新范围。

示例

import java.util.function.Consumer;

public class LambdaTest {

   public int x = 1;

   class FirstLevel {

      public int x = 2;

      void methodInFirstLevel(int x) {

         Consumer<Integer> myConsumer = (y) -> {   // Lambda Expression            System.out.println("x = " + x); 

            System.out.println("y = " + y);

            System.out.println("this.x = " + this.x);

            System.out.println("LambdaTest.this.x = " + LambdaTest.this.x);

         };

         myConsumer.accept(x);

      }

   }

   public static void main(String args[]) {

      final LambdaTest outerClass = new LambdaTest();

      final LambdaTest.FirstLevel firstLevelClass = outerClass.new FirstLevel();

      firstLevelClass.methodInFirstLevel(10);

   }

}

输出结果

x = 10

y = 10

this.x = 2

LambdaTest.this.x = 1

以上是 Java中lambda表达式中的局部变量的规则是什么? 的全部内容, 来源链接: utcz.com/z/343418.html

回到顶部