为了方便起见,我想使用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) { ... }
所以我可能会像上面描述的那样使用它吗?如果做到这一点是个好习惯吗?
编辑我被要求解释为什么我的问题与Why is declaration required in Java's try-with-resource不同
解释非常简单:我不是要求为什么?,但是:如果这样做是好的做法?
答案 0 :(得分:2)
AutoCloseable的目的是在不再使用时自动执行清理。
因此,在try-with-resources块之后使用该对象会违反最不惊讶的原则。
答案 1 :(得分:0)
感谢@Tunaki,他给了我非常有用的相关问题链接:Why is declaration required in Java's try-with-resource
我不怀疑为什么存在这种限制,但我认为从设计的角度来看,我对使用的看法是不好的。
但根据Java-9
will allow such usage as
MyCloseable mc;
try (mc = new MyCloseable()) { ... }
我正在寻找什么,所以我想,我的问题的答案将是:是的,没关系