为什么在Java 7中没有为ARM改进StAX类

Dee*_*pak 9 java stax java-7 try-with-resources

我期望能发现XMLStreamReaderAutoCloseable在Java 7中.然而,事实并非如此.是否存在技术原因导致StAX读取器/写入器接口未被(或不应该)改进以实现AutoCloseable?他们已经有了密切的方法,其意图与密切方法没有区别AutoCloseable.

ala*_*inm 8

如果你仔细观察以下close()方法AutoCloseable:

关闭此资源,放弃任何底层资源.在try-with-resources语句管理的对象上自动调用此方法.

甚至Closeable close()方法:

关闭此流并释放与其关联的所有系统资源.如果流已经关闭,则调用此方法无效.

close()方法XMLStreamReader说:

释放与此Reader相关的任何资源.此方法不会关闭基础输入源.

实际上,输入源由Reader实现Closeable接口的管理.所以读者可以在try-with-ressource中关闭.

例如 :

    XMLInputFactory factory = XMLInputFactory.newInstance();
    XMLStreamReader reader = null;
    try (FileReader fr = new FileReader("file.xml")) { //Will close the FileReader
        reader = factory.createXMLStreamReader(fr);
        reader.close();
    }
    catch (XMLStreamException ex) {
        if(reader!=null)try {
            reader.close();
        } catch (XMLStreamException ex1) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex1);
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 我个人会重构该代码。reader.close() 应该位于 finally 块中,以防发生异常(您的捕获仅适用于 XMLStreamException,但它也可能引发未经检查的异常。)我还将删除对 reader 是否为 null 的检查,并简单地嵌套第二层try-finally 在另一个 try 块内。 (4认同)