Язык навигации дерева объектов в Java

В системе, которую я в настоящее время разрабатываю, я часто должен перемещаться по дереву объектов и на основе его состояния, и значения принимают меры. В нормальном Java это приводит к утомительному для циклов, если операторы и т.д... Там альтернативные пути состоят в том, чтобы достигнуть древовидной навигации, подобной XPath для XML? Я знаю, что существует JXPath и OGNL, но Вы знаете какие-либо другие библиотеки для такой цели? Вы знаете какие-либо библиотеки, которые генерируют байт-коды для определенных древовидных выражений навигации для создания обработки с такой скоростью, как собственные четверки Java и IFS?

9
задан duffymo 8 March 2010 в 10:10
поделиться

3 ответа

Возможно, вы захотите рассмотреть Jakarta Bean Utils

String street = (String) PropertyUtils.getProperty(user, "address.street");

Вы можете перемещаться по графу объектов, используя точечную нотацию. Вы также можете получить доступ к индексированным свойствам. Более подробная информация в документации.

Одним из недостатков является то, что Bean Utils ожидает, что граф, по которому вы перемещаетесь, не содержит нулевых ссылок.

Приведенный ниже фрагмент кода вызовет ошибку NPE

Person person = new Person();
person.setAddress(null);

String street = (String) PropertyUtils.getProperty(person, "address.street");

Для преодоления этого ограничения моя команда реализовала класс, который создает экземпляры всех нулевых ссылок графа по требованию. Этот код основан на отражении и динамических прокси (CGLIB).

5
ответ дан 4 December 2019 в 22:28
поделиться

Могу я спросить вас, почему вам не нравится OGNL / JXPath? Очевидно, вы, возможно, провели свое исследование, чтобы сказать «нет», но я хотел бы знать, почему OGNL не решает задачу, для решения которой он был разработан.

Также в google-collections есть некоторые функторы (в дополнение к обычным коллекциям, упомянутым выше), на которые, возможно, стоит обратить внимание.

2
ответ дан 4 December 2019 в 22:28
поделиться

Коллекции Джакарты ( http://commons.apache.org/collections/apidocs/ ) позволяют применять предикаты, функторы, и т.д ... о членах коллекции. Это то направление, в котором вы ищете?

1
ответ дан 4 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: