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

以上内容是否对您有帮助:

免费 AI IDE


更多建议: