Java Lambda变量捕获

2018-03-18 14:44 更新

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"));
    
  }
}

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

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号