reflectionsパッケージを使用して、特定のインタフェースを実装するクラスのセットを取得しています。このセットは、可能なコマンドラインオプションのリストとして使用されます。によって返されたセットをフィルタリングする方法はありリフレクトでインスタンス化可能なクラスのみを取得するには
Map<String, Class<? extends InterfaceOptimizer>> optimizerList = new HashMap<String, Class<? extends InterfaceOptimizer>>();
Reflections reflections = new Reflections("eva2.optimization.strategies");
Set<Class<? extends InterfaceOptimizer>> optimizers = reflections.getSubTypesOf(InterfaceOptimizer.class);
for(Class<? extends InterfaceOptimizer> optimizer : optimizers) {
optimizerList.put(optimizer.getName(), optimizer);
}
:私の問題は、私が唯一のインスタンス化可能なクラスを取得したいが、今は次のコードの両方からインスタンス化および非インスタンス化クラス(例えば、抽象クラス)を取得することですgetSubTypesOf
抽象クラスを除外しますか?それはクラスが引数なしのコンストラクタ
http://stackoverflow.com/questions/1072890/how-can-i-determine-whether-a-java-class-is-abstract-by-reflection – rusmus
@rusmusを参照してください。具体的には、クラスと抽象クラスはその一例にすぎません。確かに、リンクした質問は抽象クラスをかなりうまくカバーしていますが、インターフェースをチェックする方法はわかりませんでした。 – halfdan