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()) { ... }