かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Lookupしてみよう その1「基本」

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で取得できてることがわかります。