N2 ToolBox(跡地)

跡地です。引っ越しました。http://d.hatena.ne.jp/nosen

Iterable好き:ClassDiscoverer編

2008-02-28 08:00:37 | LiQ
以下のようなクラスを作ってみました。

例えば、META-INF/classes.lstというファイルに、
以下のようにクラス名をリストアップ
しておきます。
----
jp.liq.sample.AImpl1
jp.liq.sample.AImpl2
java.lang.String
----
以下のようなコードで上記のクラスが取得できます。
----
ClassDiscoverer discover = new ClassDiscoverer();

discover.addClassList("META-INF/classes.lst");

int cnt = 0;
for(Class c: discover.classes().isA(A.class)) {
    assertTrue(A.class.isAssignableFrom(c));
    cnt++;
}
assertEquals(2, cnt);
----
ここではインタフェース「A」のサブクラスのみを取得しています。
仕掛け自体は非常に単純なのですが、
これで、Jarファイルをクラスパスに通すだけで、そのJarのMETA-INF/classes.lst
に書いてあるクラスを取得できるようになります。
LiQ Containerと組み合わせるとプラグインぽい仕組みを簡単に作ることが
できて便利そうなので、LiQ Container本体にこっそり入れるかどうか
考え中です。