java - 如何在没有实例或类名的情况下获取类对象

标签 java class static

我有一个抽象类 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/

相关文章:

java - 从代码点数字的 IntStream 中创建一个字符串?

java - 从 Object 类的对象访问整数

javascript - 具有相同类但不同 ID 的 if else 语句中的 Jquery Click 事件

C++ 编译时和运行时可用的名称属性

c++ - 在 C++ 中使用多个静态库解决冲突

java - Android 使用 3G 三角测量的位置坐标精度较低

java - org.dbunit.dataset.NoSuchTableException,但表存在

c++ - 删除模板类型

c++ - ((Thermostat*)this)->Thermostat::_dht' 没有类类型

Java 初始化对象 - 静态访问与非静态访问