В системе, которую я в настоящее время разрабатываю, я часто должен перемещаться по дереву объектов и на основе его состояния, и значения принимают меры. В нормальном Java это приводит к утомительному для циклов, если операторы и т.д... Там альтернативные пути состоят в том, чтобы достигнуть древовидной навигации, подобной XPath для XML? Я знаю, что существует JXPath и OGNL, но Вы знаете какие-либо другие библиотеки для такой цели? Вы знаете какие-либо библиотеки, которые генерируют байт-коды для определенных древовидных выражений навигации для создания обработки с такой скоростью, как собственные четверки Java и IFS?
Возможно, вы захотите рассмотреть 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-collections есть некоторые функторы (в дополнение к обычным коллекциям, упомянутым выше), на которые, возможно, стоит обратить внимание.
Коллекции Джакарты ( http://commons.apache.org/collections/apidocs/ ) позволяют применять предикаты, функторы, и т.д ... о членах коллекции. Это то направление, в котором вы ищете?