私の問題を説明する前に、検索する正しい用語が不足しているのではないかと思うので、ここでのstackoverflorでの検索は実を結びませんでした。したがって、回答へのリンクも非常に高く評価されます。
ファクトリを持つライブラリを作成しようとしています。これを「MyFactory」と呼びましょう。MyFactoryには、抽象クラス「MySuper」のオブジェクトを返すメソッドがありますが、使用可能なサブクラスを「MySuper」に公開するメソッドもあります。ライブラリは多くの拡張を目的としているため、「MySuper」のサブクラスが頻繁に追加され、ライブラリが再コンパイルされ、それを使用するアプリケーションのライブラリフォルダにダンプされます。
私が望んでいるのは、「MySuper」のサブクラスをライブラリに追加し、「MyFactory」にそれを認識させることです。できれば、「MySuper」の新しいサブラスを作成する以外に何もする必要はありません。
これまでのところ、リフレクションを使用して、次のようにメソッドにクラス名を指定することにより、「MyFactory」に「MySuper」タイプの新しいインスタンスを作成させています。
public MySuper getSuperObject(String name) {
return (MySuper) Class.forName("my.package." + name).newInstance(); }
しかし、ファクトリにすべての「MySuper」クラスをfx a List of Stringとして公開させて、ライブラリを使用するアプリケーションが何を呼び出すことができるかを知るにはどうすればよいでしょうか。パッケージの内容を繰り返すことはできますか?
私は解決策を受け入れています。最も重要な部分は、将来、新しい「MySuper」サブクラスを追加するのは非常に面倒なことではないということです。
ありがとう :-)
アップデート:
リフレクションを簡単に処理し、特定のクラスのサブタイプを検索できる優れたJavaライブラリを見つけたことに注意してください。したがって、私の問題はそのライブラリで解決できます(私はそれをテストしました)。リンクは次のとおりです:http ://code.google.com/p/reflections/