我有一个抽象类 MyClass
,它有一个静态方法,可以用多个 MyClassDescendant
对象填充给定的集合。此方法应调用 MyClassDescendant
的静态 getRandom()
方法来获取对象实例。
我当前的代码如下所示:
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
适用于静态方法,但我不希望 MyClass
使用 class
,而是针对特定的 MyClassDescendant
(后代类型很少)。
有没有办法在没有实例或类名的情况下获取类对象?
最佳答案
由于您处于静态上下文中,因此您必须复制一些代码,但您可以进行委托(delegate)。
public class MyClassDescendant extends MyClass {
public static void populate(Collection<MyClass> coll, int count) {
MyClass.populate(coll, MyClassDescendant.class, count);
}
}
现在你可以调用
MyClassDescendant.populate(collection, 3);
关于java - 如何在没有实例或类名的情况下获取类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15666355/