我有一个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
for MyClass
,而是特定的MyClassDescendant
(后代类型很少)。
有没有办法在没有实例或类名的情况下获取类对象?