ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 具有可关闭参数的try-with-resources的行为

2019-05-17 10:50:56  阅读:208  来源: 互联网

标签: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

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

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有