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

  }
}

上面的代碼生成以下結(jié)果。



例2

下面的代碼有一個變量x,它不是final,只能初始化一次。我們?nèi)匀豢梢栽趌ambda表達式中使用它。

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

上面的代碼生成以下結(jié)果。


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

上面的代碼生成以下結(jié)果。

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

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號