かずきのBlog@hatena

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

Lookupしてみよう その2「複数Lookup」

さて、前回単純な1つのインスタンスのLookupについて簡単に試してみました。今回は、複数のインスタンスがLookupの中にあったときはどうするんだろう?というのをやってみようと思います。
複数のインスタンスをlookupするには、lookupAllという、そのものズバリな名前のメソッドがLookupクラスに用意されています。
これも、使い方は簡単なので、早速使ってみようと思います。1つ前のエントリと同じ要領でプロジェクトにjarを追加して以下のプログラムを書いて実行します。

package lookupsample;

import java.util.Collection;
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);

        // Stringを複数登録
        c.add("Hello");
        c.add("world");
        c.add("複数インスタンス");
        // Integer型も一応登録しておく
        c.add(100);

        // 複数インスタンスを取得するにはlookupAllを使う
        Collection<? extends String> str = l.lookupAll(String.class);

        // lookupしたものを表示する
        System.out.println("l.lookupAll(String.class) = " + str);
    }
}

こいつを実行すると

l.lookupAll(String.class) = [Hello, world, 複数インスタンス]

と表示されます。
Lookupに登録した複数のインスタンスがきちんととれていることがわかりますね。