java同时点击保存两次_java – 用于保存多个可关闭资源的类的正确习惯用法

对于用户代码,有几个选项可以正确关闭多个资源:

1.尝试资源

try (

A a = new A();

B b = new B();

C c = new C()

) {

// ...

}

除了好又短,它也是正确的.

2.番石榴更接近

对于JDK7之前的版本,有一个Guava的Closer,用途如下:

Closer closer = Closer.create();

try {

A a = closer.register(new A());

B b = closer.register(new B());

C c = closer.register(new C());

// ...

} catch (Throwable e) { // must catch Throwable

throw closer.rethrow(e);

} finally {

closer.close();

}

拥有多个资源的对象怎么样?

说我有:

public class P implements AutoCloseable {

private A a;

private B b;

private C c;

public P() {

a = new A();

b = new B();

c = new C();

}

public close() {

c.close();

b.close();

a.close();

}

}

此代码存在多个问题:

>如果从构造函数抛出异常,则不会关闭任何内容(调用者没有要调用的实例关闭)

>如果从关闭引发异常,则不会关闭某些资源

1和2都没有遇到这些问题.然而:

>尝试资源显然不能使用,因为P的生命周期由调用者控制

> Guava Closer似乎也无法使用.虽然它更灵活,但它不支持close-and-rethrow,这是构造函数所必需的

没有太多样板的N资源的正确模式是什么?该解决方案还应具有1和2的抑制属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值