かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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に登録した複数のインスタンスがきちんととれていることがわかりますね。