为了账号安全,请及时绑定邮箱和手机立即绑定

从异步运行的 lambda 访问方法参数

从异步运行的 lambda 访问方法参数

噜噜哒 2021-08-19 16:12:38
我所知道的:只能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?我测试了代码,编译并有趣的是“返回”消息比“打印”早。这意味着我可以在方法返回后访问方法参数。
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

代码不会抛出异常,因为 param1 实际上是最终的。Java Lambda 类似于闭包。


查看完整回答
反对 回复 2021-08-19
  • 1 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信