Java Lambda变量捕获

Java Lambda变量捕获

lambda表达式可以访问最终局部变量或局部非最终初始化只有一次的变量。

例子

下面的代码显示我们可以访问和使用最终的局部变量。

import java.util.function.Function;

public class Main {
  public static void main(String[] argv) {
    final String x = "Hello"; 
    Function<String,String> func1 = y -> {return y + " "+ x ;};
    System.out.println(func1.apply("w3cschool.cn"));

  }
}

上面的代码生成以下结果。

例2

下面的代码有一个变量x,它不是final,只能初始化一次。我们仍然可以在lambda表达式中使用它。

import java.util.function.Function;

public class Main {
  public static void main(String[] argv) {
    String x = "Hello"; 

    Function<String,String> func1 = y -> {return y + " "+ x ;};
    System.out.println(func1.apply("w3cschool.cn"));

  }
}

上面的代码生成以下结果。


例3

下面的代码显示我们不能改变在lambda表达式之外定义的值。

import java.util.function.Function;

public class Main {
  public static void main(String[] argv) {
    String x = "Hello"; 

    Function<String,String> func1 = y -> {/*x="a";*/ return y + " "+ x ;};
    System.out.println(func1.apply("w3cschool.cn"));

  }
}

上面的代码生成以下结果。

例4

我们可以更改lambda表达式中的非局部变量。

import java.util.function.Function;

public class Main {
  static String x = "Hello"; 
  public static void main(String[] argv) {

    Function<String,String> func1 = y -> {x="a"; return y + " "+ x ;};
    System.out.println(func1.apply("w3cschool.cn"));

  }
}

上面的代码生成以下结果。

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Java Lambda变量捕获》
文章链接:https://zhuji.vsping.com/294147.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。