NetBeansのモジュール開発で、割と重要なポジションをしめるというLookupというものがあります。
こいつは何?ということで触ってみました。
Lookupってなんぞ?
触ってみた感じで受けた印象は、オブジェクトを入れておいて、必要に応じて取り出せるものです。Lookupに入っているオブジェクトを通じて、各オブジェクト同士コミュニケーションをはかることが出来ます。
Lookup内のオブジェクトが変更したタイミングでListenerを登録しておけば処理できるので、何かがくるのをぼーっと待っておいて、目的のものが来た時に処理することもできます。
使ってみよう
このLookupというやつは、意外とシンプル設計されているみたいでjarを1つクラスパスに追加すれば使えるようになります。追加するjarは、NetBeansをインストールしたフォルダの下の以下のjarになります。
- platform11\lib\org-openide-util.jar
ということで、Javaアプリケーションのプロジェクトを新規作成して、org-openide-util.jarをライブラリに追加します。Lookup系のオブジェクトには色々ありますが、とりあえず一番簡単にかつ、それなりに使えるのは、AbstractLookupになると思います。
こいつは、InstanceContentクラスをコンストラクタで受け取り、InstanceContextに追加されたオブジェクトを取得することが出来るようになるといった動きをします。
百聞は一見にしかずということなので、早速使ってみます。文字列のHelloとIntegerの100を追加してLookupしてみます。
package lookupsample; import org.openide.util.Lookup; import org.openide.util.lookup.AbstractLookup; import org.openide.util.lookup.InstanceContent; public class Main { public static void main(String[] args) { // オブジェクトの入れ物 InstanceContent c = new InstanceContent(); // InstanceContentからLookupするAbstractLookupを作る Lookup l = new AbstractLookup(c); // Helloと100を登録 c.add("Hello"); c.add(100); // 型を指定してlookupする String str = l.lookup(String.class); Integer i = l.lookup(Integer.class); // lookupしたものを表示する System.out.println("l.lookup(String.class) = " + str); System.out.println("l.lookup(Integer.class) = " + i); } }
実行すると
l.lookup(String.class) = Hello l.lookup(Integer.class) = 100
このように、登録したインスタンスがlookupで取得できてることがわかります。