之前把 try
都改成了 java try with resource
形式。现在有新需求,发现无法实现,难道又要改回来?
try( Handler api = getHandler() ) { // 做点啥 api.getState(); } catch ( Exception e ){ log.error("getState {} 时异常 {}", api, e); // [看这里] 我想要在执行出错的情况下多做一步操作,api 这个对象竟然没法访问到!!! api.markDirty(); }
请教,如果我要在异常的情况下多做一点操作, java try with resource
形式是不是就没法写了???
那也太鸡肋了。。。
![]() | 1 ChenFanlin 2020-09-30 17:34:48 +08:00 |
![]() | 2 glasslion 2020-09-30 17:37:39 +08:00 api 定义移到外面去不就行了 |
![]() | 3 xiangyuecn 2020-09-30 17:39:02 +08:00 try( Handler api = getHandler() ) { } 这才是真正的 try with resource,科学点: using( Handler api = getHandler() ){ } 啥也不是: try(xxx){}catch(){} |
![]() | 4 lxk11153 2020-09-30 17:41:05 +08:00 链接: https://juejin.im/post/6844903517086285837 > 在 Java 7 中,try-with-resouces 语法要求为每一个资源声明一个新的变量,而且这些资源由 try-with-resources 语句进行管理。 > 在 Java 9 中:如果一个资源被 final 或者等效于 final 变量引用,则在不需要声明一个新的变量的情况下,try-with-resources 就可以管理这个资源。 |
5 tairan2006 2020-09-30 19:21:19 +08:00 不是。。。你这把 try 的两种用法混合双打? |
![]() | 6 ebony0319 2020-10-01 00:00:05 +08:0 via Android 好像继承 Closeable 接口,然后重写 close 方法即可。你这种情况只需要重写 close 方法。 |
![]() | 9 cheneydog OP @xiangyuecn 看不懂 |
![]() | 10 lxk11153 2020-10-01 16:29:27 +08:00 @cheneydog #8 楼层 2 不是已经说了吗? ```java Handler api; try( Handler _api = (api=getHandler()) ) { } catch (Exception e) { api.markDirty(); } ``` |
![]() | 11 lxk11153 2020-10-01 16:32:14 +08:00 还是这样吧: ```java Handler api = getHandler(); try( Handler _api = api ) { } catch (Exception e) { api.markDirty(); } ``` |
![]() | 12 javapythongo 2020-10-01 22:55:37 +08:00 在 finaly 手动 close 就是了 |