java – 具有可关闭参数的try-with-resources的行为
作者:互联网
Java-7的try-with-resources是否需要将closable直接分配给变量?简而言之,这段代码是……
try (final ObjectInputStream ois = new ObjectInputStream(
new ByteArrayInputStream(data))) {
return ois.readObject();
}
相当于这个块?…
try (final ByteArrayInputStream in = new ByteArrayInputStream(data);
final ObjectInputStream ois = new ObjectInputStream(in)) {
return ois.readObject();
}
我对Java Language Specification第14.20.3节的理解说它们不一样,必须分配资源.从常见的使用角度来看,这将是令人惊讶的,我找不到任何针对该模式的文档警告.
解决方法:
这两个块在它们不会生成相同代码的意义上不相同.但是由于ObjectInputStream.close()将在传递它的ByteArrayInputStream上调用close(),所以第一个块完全正常.
编辑:我忘了的是,与新的BufferedInputStream(new * InputStream(…))等合理的构造不同,ObjectInputStream构造函数实际上从您传递它的流中读取,因此可以合理地抛出异常.出于这个原因,我实际上建议第二个块,而不是第一个块.
标签:java,try-with-resources 来源: https://codeday.me/bug/20190517/1120471.html