Java-7 的 try-with-resources 是否需要将 closable 直接分配给变量?简而言之,这段代码是...
try (final ObjectInputStream ois = new ObjectInputStream(
new ByteArrayInputStream(data))) {
return ois.readObject();
}
相当于这个 block ?...
try (final ByteArrayInputStream in = new ByteArrayInputStream(data);
final ObjectInputStream ois = new ObjectInputStream(in)) {
return ois.readObject();
}
我对 Java Language Specification 的第 14.20.3 节的理解说他们不一样,必须分配资源。从常见的使用角度来看,这会令人惊讶,而且我找不到任何针对该模式的文档警告。
最佳答案
这两个 block 并不等同,因为它们不会生成相同的代码。但由于 ObjectInputStream.close()
将在您传递给它的 ByteArrayInputStream
上调用 close()
,因此第一个 block 完全没问题。
编辑:我忘记的一点是,与 new BufferedInputStream(new *InputStream(...))
这样的合理构造不同,ObjectInputStream
构造函数实际上是从流中读取的通过它,因此可以合理地抛出异常。出于这个原因,我实际上推荐第二个 block ,而不是第一个 block 。
关于java - 带有可关闭参数的 try-with-resources 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21484606/