私が現在開発中のシステムでは、しばしばオブジェクト ツリーをナビゲートし、その状態と値に基づいてアクションを実行する必要があります。通常の Java では、これは面倒な for ループ、if ステートメントなどになります。XML の XPath と同様に、ツリー ナビゲーションを実現する別の方法はありますか? JXPath と OGNL があることは知っていますが、そのような目的のための他のライブラリを知っていますか? 特定のツリー ナビゲーション式のバイトコードを生成して Java ネイティブの for および if と同じくらい高速に処理するライブラリを知っていますか?
3 に答える
Jakarta Bean Utilsを検討することをお勧めします
String street = (String) PropertyUtils.getProperty(user, "address.street");
ドット表記を使用して、オブジェクト グラフをナビゲートできます。インデックス付きプロパティにもアクセスできます。ドキュメントの詳細。
欠点の 1 つは、ナビゲートしているグラフに null 参照が含まれていないことを Bean Utils が想定していることです。
以下のコード スニペットは、NPE をスローします。
Person person = new Person();
person.setAddress(null);
String street = (String) PropertyUtils.getProperty(person, "address.street");
この制限を克服するために、私のチームは、オンデマンドでグラフのすべての null 参照のインスタンスを作成するクラスを実装しました。このコードは、リフレクションおよび動的プロキシ (CGLIB) に基づいています。
OGNL/JXPath を好まない理由をお聞きしてもよろしいですか? 明らかに、あなたはノーと言うために調査を行ったかもしれませんが、OGNLが解決するように設計された目的を解決していない理由を知りたい.
また、google-collections には、(上記の commons コレクションに加えて) 検討する価値のあるファンクターがいくつかあります。
Jakarta コレクション ( http://commons.apache.org/collections/apidocs/ ) を使用すると、述語、ファンクターなどをコレクション メンバーに適用できます。これはあなたが探している方向ですか?