Как обрабатывать Writer, Result, OutputStream в конструкторе? - PullRequest
3 голосов
/ 23 декабря 2010

У меня есть класс, который инкапсулирует StAX Writer для особой бизнес-записи XML. Вы можете вставить некоторые доменные объекты, и логика генерирует соответствующий XML.

Я не хочу предлагать экземпляр XMLStreamWriter по соображениям безопасности, поэтому этот класс является единственным ответственным за запись в этого писателя. XMLStreamWriter будет создан в этом классе. Для поддержки почти всех выходных вариантов, таких как Result, OutputStream и Writer, я также предоставляю конструкции для этих вариантов.

public CustomStreamWriter ([...], Result result) {
      this([...], (Object) result);
}

public CustomStreamWriter ([...], OutputStream outputStream) {
      this([...], (Object) outputStream);
}

public CustomStreamWriter ([...], Writer writer) {
      this([...], (Object) writer);
}

protected CustomStreamWriter ([...], Object outputHandler) {
    // Initialize some final fields and do some stuff with [...]
    XMLOutputFactory factory = XMLOutputFactory.newInstance();

    if(outputHandler instanceof OutputStream) {
       this.writer = factory.createXMLStreamWriter((OutputStream) outputHandler);
    } else if(outputHandler instanceof Result) {
       this.writer = factory.createXMLStreamWriter((Result) outputHandler);
    } else if(outputHandler instanceof Writer) {
       this.writer = factory.createXMLStreamWriter((Writer) outputHandler);
    }
}

Когда я смотрю на это, я думаю, что это очень уродливо и не очень хороший способ добиться этого. Stackoverflow, у вас есть намеки на меня?

1 Ответ

1 голос
/ 23 декабря 2010

Я бы написал так:

public CustomStreamWriter ([...], Writer writer) throws XMLStreamException {
    this([...], XMLOutputFactory.newInstance().createXMLStreamWriter(writer);
}

protected CustomStreamWriter ([...], XMLStreamWriter outputHandler) {
    this.writer = writer;
}

Если конструктор выбрасывает исключение, конструктор не может его обработать и создать допустимый объект, поэтому выбрасывание исключения - разумный способ справиться с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...