编程语言
首页 > 编程语言> > java – 具有可关闭参数的try-with-resources的行为

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