定义自己的 XMLEventReader 实现 Closeable 接口
Define own XMLEventReader to implement the Closeable interface
我想在 XMLEventReader
中使用 try-with-resources。
我发现,XMLEventReader
只是一个接口,我从 XMLInputFactory.newInstance().createXMLEventReader(stream)
得到的对象属于 com.sun.xml.internal.stream.XMLEventReaderImpl
class.
通常我会扩展 class 来实现 Closeable
。但我无法访问它(我无法在我的 IDE 中打开它)。
我在网上找到了它的代码。但是我不愿意把它复制到一个新的class,只是为了让它可以关闭。
那么,为什么我无法访问 class 以及创建 Closeable
XMLEventReader
的最佳解决方案是什么?
这个怎么样:
public class CloseableXmlEventReader implements XMLEventReader, AutoCloseable{
private final XMLEventReader internal;
public CloseableXmlEventReader(XMLEventReader internal) {
this.internal = internal;
}
@Override
public XMLEvent nextEvent() throws XMLStreamException {
return internal.nextEvent();
}
@Override
public boolean hasNext() {
return internal.hasNext();
}
@Override
public XMLEvent peek() throws XMLStreamException {
return internal.peek();
}
@Override
public String getElementText() throws XMLStreamException {
return internal.getElementText();
}
@Override
public XMLEvent nextTag() throws XMLStreamException {
return internal.nextTag();
}
@Override
public Object getProperty(String name) throws IllegalArgumentException {
return internal.getProperty(name);
}
@Override
public void close() throws XMLStreamException {
internal.close();
}
@Override
public Object next() {
return internal.next();
}
}
这样使用:
try(CloseableXmlEventReader reader =
new CloseableXmlEventReader(XMLInputFactory.newInstance().createXMLEventReader(new FileInputStream("test.xml")))) {
} catch (XMLStreamException | FileNotFoundException ex) {
Logger.getLogger(CloseableXmlEventReader.class.getName()).log(Level.SEVERE, null, ex);
}
我想在 XMLEventReader
中使用 try-with-resources。
我发现,XMLEventReader
只是一个接口,我从 XMLInputFactory.newInstance().createXMLEventReader(stream)
得到的对象属于 com.sun.xml.internal.stream.XMLEventReaderImpl
class.
通常我会扩展 class 来实现 Closeable
。但我无法访问它(我无法在我的 IDE 中打开它)。
我在网上找到了它的代码。但是我不愿意把它复制到一个新的class,只是为了让它可以关闭。
那么,为什么我无法访问 class 以及创建 Closeable
XMLEventReader
的最佳解决方案是什么?
这个怎么样:
public class CloseableXmlEventReader implements XMLEventReader, AutoCloseable{
private final XMLEventReader internal;
public CloseableXmlEventReader(XMLEventReader internal) {
this.internal = internal;
}
@Override
public XMLEvent nextEvent() throws XMLStreamException {
return internal.nextEvent();
}
@Override
public boolean hasNext() {
return internal.hasNext();
}
@Override
public XMLEvent peek() throws XMLStreamException {
return internal.peek();
}
@Override
public String getElementText() throws XMLStreamException {
return internal.getElementText();
}
@Override
public XMLEvent nextTag() throws XMLStreamException {
return internal.nextTag();
}
@Override
public Object getProperty(String name) throws IllegalArgumentException {
return internal.getProperty(name);
}
@Override
public void close() throws XMLStreamException {
internal.close();
}
@Override
public Object next() {
return internal.next();
}
}
这样使用:
try(CloseableXmlEventReader reader =
new CloseableXmlEventReader(XMLInputFactory.newInstance().createXMLEventReader(new FileInputStream("test.xml")))) {
} catch (XMLStreamException | FileNotFoundException ex) {
Logger.getLogger(CloseableXmlEventReader.class.getName()).log(Level.SEVERE, null, ex);
}