我所知道的:只能final或有效final地从 lambda 内部访问局部变量。static变量也可以访问,也可以修改。
我不知道的是:为什么这段代码不抛出异常?
public static String sampleFunction(String param1, int param2) {
new Thread(() -> {
try { Thread.sleep(100000); } catch (InterruptedException e) { }
// accessing method parameter here...
String _param1 = param1;
System.out.println(_param1);
}).start();
return "";
}
public static void Main(String[] arguments) {
sampleFunction("to print", 9);
System.out.println("function returned");
}
因此,考虑到参数在返回时被释放,这发生在尝试从异步运行的lambda表达式内部访问它们之前,为什么不 throw Exception?我测试了代码,编译并有趣的是“返回”消息比“打印”早。这意味着我可以在方法返回后访问方法参数。
拉丁的传说
相关分类