1

为了方便起见,我想使用AutoCloseable接口对对象做一些事情,这些事情应该在进一步使用之前完成。

唯一的问题是try-with-resources块本身就是事物,我的意思是一般来说,为了获得对我的AutoCloseable实例的引用,我必须做这样的事情:

    MyCloseable mc;
    try (MyCloseable m = mc = new MyCloseable()) {
        m.doSomeStuff();
    }
    System.out.println(mc.getValue1());
    System.out.println(mc.getValue2());
    // ... and so on

这里是这个结构:

MyCloseable mc;
try (MyCloseable m = mc = new MyCloseable()) {

看起来有些凌乱。所以我的问题更多是关于设计问题。我怀疑java架构师没有设想这样使用try-w-r块的原因是什么:

MyCloseable mc = new MyCloseable();
try (mc) { ... }

那么我可能不应该像上面描述的那样使用它吗?如果这样做是个好习惯?

编辑我被要求解释为什么我的问题与为什么 Java 的 try-with-resource 中需要声明不同

解释很简单:我不是在问为什么?,但是:如果这样做是个好习惯?

4

2 回答 2

3

AutoCloseable的目的是在不再使用时自动执行清理。

因此,在 try-with-resources 块之后使用对象将违反最小惊讶原则。

于 2016-01-15T09:46:17.360 回答
0

感谢@Tunaki,他为我提供了指向相关问题的非常有用的链接:为什么 Java 的 try-with-resource 中需要声明

我并没有怀疑为什么存在这种限制,但我认为我的使用想法从设计的角度来看是不好的。

但是根据事实,这Java-9 将允许这样的用法

MyCloseable mc;
try (mc = new MyCloseable()) { ... }

我到底在找什么,所以我想,我的问题的答案是:是的,没关系

于 2016-01-15T09:36:37.133 回答