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


国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码













