在我正在开发的系统中,我经常需要导航对象树,并根据其状态和值采取行动。在普通的Java中,这导致了繁琐的for循环,if语句等...是否有其他方法来实现树导航,类似于XPath for XML?我知道有JXPath和OGNL,但你知道其他任何库吗?您是否知道任何为特定树导航表达式生成字节码的库,以使处理速度与Java本地fors和ifs一样快?
答案 0 :(得分: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)。
答案 1 :(得分:2)
我可以问你为什么不喜欢OGNL / JXPath?显然你可能已经做了你的研究,但是我想知道为什么OGNL没有解决它旨在解决的目的。
此外google-collections还有一些仿函数(除了上面提到的公共集合),值得一看。
答案 2 :(得分:1)
Jakarta集合(http://commons.apache.org/collections/apidocs/)允许您在集合成员上应用谓词,仿函数等。这是你正在寻找的方向吗?