9

在我目前正在开发的系统中,我经常需要导航对象树并根据其状态和值采取行动。在普通的 Java 中,这会导致繁琐的 for 循环、if 语句等......是否有替代方法来实现树导航,类似于 XML 的 XPath?我知道有 JXPath 和 OGNL,但是您知道其他用于此目的的库吗?您是否知道任何为特定树导航表达式生成字节码以使处理与 Java 本机 fors 和 ifs 一样快的库?

4

3 回答 3

5

您可能需要考虑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)。

于 2010-03-08T14:46:37.103 回答
2

我能问你为什么不喜欢 OGNL/JXPath 吗?显然,您可能已经进行了研究以拒绝,但我想知道为什么 OGNL 没有解决它旨在解决的目的。

google-collections 也有一些函子(除了上面提到的 commons 集合),可能值得一看。

于 2010-03-08T11:08:12.660 回答
1

Jakarta 集合 ( http://commons.apache.org/collections/apidocs/ ) 允许您在集合成员上应用谓词、函子等。这是您要寻找的方向吗?

于 2010-03-08T10:25:18.507 回答