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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。