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é)果。
下面的代碼有一個變量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é)果。
下面的代碼顯示我們不能改變在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é)果。
我們可以更改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é)果。
更多建議: