1

プログラムの開始後にクラスのロードを強制する方法はありますか? 次のケースがあります: プラグイン クラスの Name と java.lang.Class を保持するハッシュマップがあります。各プラグイン クラスには、クラスを登録する静的ブロックがあります。

static {
ClassMap.getInstance().register("name",MyPlugin.class);
}

この例の MyPlugin の名前とパッケージはわかりません。だから私はこのコードがプログラムの開始時に実行されることを望んでいます。これはどのように可能ですか?

4

1 に答える 1

1

クラスオブジェクトがマップにある場合、これはクラスがすでにロードされていること、つまり静的ブロックがすでに実行されていることを意味します。

一方、クラス名(リストなど)だけを持っている場合は、次のことを実行できます。

for(String classname : yourList){
    // wrap with try / catch
    Class.forName(className);
}

これは、クラスのロード時に何が起こるかについてのかなり良い概要です


更新:あなたが望んでいるように見えるのは、すべてのプラグインクラスを見つける一種のコンポーネントスキャンです。プレーンJavaでこれを行う方法はありませんが、たとえば、リフレクションライブラリを使用してこれを行うことができます。サンプルコード:

Reflections reflections = new Reflections("com.your.project");
Set<Class<? extends YourBaseClass>> subTypes = 
    // and all of these classes are already initialized
    reflections.getSubTypesOf(YourBaseClass.class);
于 2012-08-01T15:35:29.927 に答える