Java try with resource 难受

2020-09-30 17:31:23 +08:00
 cheneydog

之前把 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 形式是不是就没法写了???

那也太鸡肋了。。。

1211 次点击
所在节点    问与答
12 条回复
ChenFanlin
2020-09-30 17:34:48 +08:00
emmm 第一直觉是在里面再套个 try catch 来执行
glasslion
2020-09-30 17:37:39 +08:00
api 定义移到外面去不就行了
xiangyuecn
2020-09-30 17:39:02 +08:00
try( Handler api = getHandler() ) {

}

这才是真正的 try with resource,科学点:

using( Handler api = getHandler() ){

}


啥也不是:
try(xxx){}catch(){}
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 就可以管理这个资源。
tairan2006
2020-09-30 19:21:19 +08:00
不是。。。你这把 try 的两种用法混合双打?
ebony0319
2020-10-01 00:00:05 +08:00
好像继承 Closeable 接口,然后重写 close 方法即可。你这种情况只需要重写 close 方法。
cheneydog
2020-10-01 16:14:01 +08:00
@ebony0319 close 永远被执行,我哪里知道有没有发生异常呢?
cheneydog
2020-10-01 16:15:28 +08:00
@lxk11153 暂时还没法用 jdk9
cheneydog
2020-10-01 16:15:54 +08:00
@xiangyuecn 看不懂
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();
}
```
lxk11153
2020-10-01 16:32:14 +08:00
还是这样吧:
```java
Handler api = getHandler();
try( Handler _api = api ) {
} catch (Exception e) {
api.markDirty();
}
```
javapythongo
2020-10-01 22:55:37 +08:00
在 finaly 手动 close 就是了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/711957

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX