特定のコレクションに多数のオブジェクトMyClass
を設定するための静的メソッドを持つ抽象クラスがあります。このメソッドは、オブジェクト インスタンスを取得するためにの静的メソッドMyClassDescendant
を呼び出す必要があります。getRandom()
MyClassDescendant
私の現在のコードは次のようになります。
public static void populate(Collection<MyClass> coll, Class<? extends MyClass> cl, int num) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
for (int i = 0; i < num; i++) {
Method m;
m = cl.getMethod("getRandom");
coll.add((MyClass)(m.invoke(null)));
}
}
それから私はそれを次のように呼びます:
MyClass.populate((Collection<MyClass>)(Collection<?>)collection, MyClassDescendant.class, 3);
このコードは機能しますが、醜いです。私が実際に達成したかったことは次のようになります。
MyClassDescendant.populate(collection, 3);
静的メソッドでない場合は、this.getClass()
. MyClass.class
それが静的メソッドで機能することはわかっていますclass
がMyClass
、特定のメソッドでは必要ありませんMyClassDescendant
(子孫の型はほとんどありません)。
インスタンスまたはクラス名を持たずにクラスオブジェクトを取得する方法はありますか?