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")); } }
上面的代码生成以下结果。