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

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

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).

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

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

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

Другие вопросы по тегам