之前把 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:00 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 就是了
|