Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对try块外部可自动关闭实例的引用_Java_Autocloseable - Fatal编程技术网

Java 对try块外部可自动关闭实例的引用

Java 对try块外部可自动关闭实例的引用,java,autocloseable,Java,Autocloseable,为了方便起见,我想使用AutoCloseable界面对对象进行一些处理,这些处理应该在对象进一步使用之前完成 唯一的一个问题是,try with resources块本身就是一件事,我的意思是,一般来说,为了获得对我的AutoCloseable实例的引用,我必须这样做: MyCloseable mc; try (MyCloseable m = mc = new MyCloseable()) { m.doSomeStuff(); } System.o

为了方便起见,我想使用
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) { ... }
那么,我不应该像上面所说的那样使用它吗?如果这样做是个好习惯

编辑我被要求解释为什么我的问题与


解释很简单:我不是问为什么?
,而是:如果这样做是一种好的做法?

多亏了@Tunaki,他给了我一个非常有用的链接,指向相关问题:

我并不怀疑为什么会存在这种限制,但我认为从设计的角度来看,我的使用观念是不好的

但是根据
Java-9

我想,我的问题的答案是:是的,没问题。的目的是在不再使用时自动执行清理


因此,在尝试使用资源块之后使用对象将违反最小惊讶原则。

我认为也是同样的问题。这在Java 9中是可能的。@Tunaki谢谢,但我不想问为什么会这样,我想问,从设计的角度来看,这样使用它可以吗?@Tunaki是的,当然可以。但无论如何,你的链接是非常有用的,我想是这样:)。我找不到任何客观的参考资料。我不同意最初的增强请求,原因有二:1)
java-9
将允许这样的使用;2)
java-8
中的
Stream
接口也可以
自动关闭
,但它确实是不必要的。
MyCloseable mc;
try (mc = new MyCloseable()) { ... }