Почему XMLEventReader не поддерживает автозакрытие (попробуйте с ресурсами)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему XMLEventReader не поддерживает автозакрытие (попробуйте с ресурсами)

Сообщение Anonymous »

Почему это так?
Я заметил, что XMLEventReader имеет метод close(), но мне не удалось использовать следующий код:
try (XMLEventReader reader = ...) { ... }


РЕДАКТИРОВАТЬ
Все оказалось намного хуже, чем я ожидал. Я хочу иметь XMLEventReader, который AutoClosable для автоматического закрытия базового источника ввода. Поэтому делегировать AutoCloseable#close функции XMLEventReader#close недостаточно!
API (XMLInputFactory и XMLEventReader) не очень помог для мне сделать это возможным с помощью всего лишь нескольких строк или даже лямбда-выражения. Я сделал это, но это очень неудовлетворительно:
static class SourceClosingXMLEventReader extends EventReaderDelegate implements AutoCloseable {

private final static XMLInputFactory FACTORY = XMLInputFactory.newInstance();

static SourceClosingXMLEventReader with(StringReader reader) throws XMLStreamException {
return new SourceClosingXMLEventReader(FACTORY.createXMLEventReader(reader), reader);
}

static SourceClosingXMLEventReader with(InputStream stream) throws XMLStreamException {
return new SourceClosingXMLEventReader(FACTORY.createXMLEventReader(stream), stream);
}

private AutoCloseable underlyingInputSource;

SourceClosingXMLEventReader(XMLEventReader originalReader, AutoCloseable underlyingInputSource) {
super(originalReader);
this.underlyingInputSource = underlyingInputSource;
}

/**
* {@link XMLEventReader#close()} does not close underlying resourcesand does not implement
* {@link AutoCloseable}, so this overridden method implementation tries to fix it
*/
@Override
public void close() throws XMLStreamException {
try {
super.close();
}
finally {
try {
underlyingInputSource.close();
}
catch (Exception e) {
new XMLStreamException(e);
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... -resources
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»