読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

指定パッケージ内のクラス一覧を取得するサンプル

1.6より追加されたStandardJavaFileManagerを使用して、指定パッケージ内のクラス一覧を取得するサンプルです。

import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileManager;
import javax.tools.JavaFileObject;
import javax.tools.StandardLocation;
import javax.tools.ToolProvider;

...

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
JavaFileManager fm = compiler.getStandardFileManager(
    new DiagnosticCollector<JavaFileObject>(), null, null);

// 一覧に含めるオブジェクト種別。以下はクラスのみを含める。
Set<JavaFileObject.Kind> kind = new HashSet<JavaFileObject.Kind>(){{
    add(JavaFileObject.Kind.CLASS);
}};

// ブートクラスパスから、"java.io"パッケージ以下のクラス一覧を取得する。
for ( JavaFileObject f : fm.list(StandardLocation.PLATFORM_CLASS_PATH, "java.io", kind, false)) {
    System.out.println( f.getName() );
}

実行時にはjdk付属のtools.jarをクラスパスに追加しておく必要があるのでお忘れなく。実行結果は以下です。

Bits.class
BufferedInputStream.class
BufferedOutputStream.class
BufferedReader.class
BufferedWriter.class
ByteArrayInputStream.class
ByteArrayOutputStream.class
CharArrayReader.class
CharArrayWriter.class
CharConversionException.class
Closeable.class
...略

内部的には、「ロードしたクラスを元に探索」ではなくファイルシステムベースでクラスパス上のjarを展開して探索」している模様。昔は似たようなことを自前でやっていたけど、最近はさくっとできるんですねー。何かに使えそう。