Как правильно расширить функциональность элементов DOM? - PullRequest
2 голосов
/ 13 сентября 2011

После долгого перерыва в активном кодировании я только начинаю привыкать к Java, так что это можно считать «вопросом новичка».Любая помощь приветствуется.

Рассмотрим следующий сценарий.Я анализирую XML-документ как DOM.Я использую javax.xml.parsers.DocumentBuilder для получения org.w3c.dom.Document узла и сканирования через его org.w3c.dom.Element узлы, и я в порядке с этим.

Однако я хотел бы расширить функциональность моих org.w3c.dom.Element объектов,Скажем, я хотел бы иметь удобный способ извлечения некоторой информации из узлов, предоставив им некоторый метод public FancyObject toFancyObject().Как правильно это сделать?

Учитывая, что org.w3c.dom.Element является интерфейсом, наследование, похоже, не вариант.Композиция, с другой стороны, кажется в этом случае довольно громоздкой, поскольку это будет похоже на 5% новых функций и 95% делегирования существующих методов.

Кроме того, я знаю, что всегда мог написатьstatic служебный метод для получения моего FancyObject, но я бы хотел избежать этого решения.

1 Ответ

4 голосов
/ 13 сентября 2011

У вас есть несколько вариантов:

  1. Используйте поле пользовательских данных интерфейса узла.Вы можете прикрепить к нему произвольные объекты и создать нечто, похожее на ваш статический вариант.
  2. Вместо этого используйте JDOM или DOM4J.Эти API лучше подходят для ваших требований по расширению базовых классов реализации.Например, с помощью JDOM вы можете определить пользовательскую NodeFactory, которая может создавать настраиваемые реализации Element.
  3. Используйте JAXB для демонтажа XML в граф объектов.В этом случае у вас есть почти полная свобода для реализации пользовательского поведения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...