如何将 class 类型分配给通配符 class 定义 (java)

How to assign a class type to a wildcard class definition (java)

所以我正在尝试与我拥有的一些遗留代码进行交互。这是我正在尝试使用的 class 的基本结构:

public class InterfaceFactory
{
    public static Class<? extends ParentClass> newClassObject;
    public static ParentClass newKidClassMaker()
    {
         ParentClass x = newClassObject();
         return x;
    }
 }

所以在我使用这个 newKidClassMaker() 方法之前,我必须为 newClassObject 分配一个实际的 class 类型。这就是难倒我的地方。我昨天到了互联网的尽头寻找答案。我期待这样的事情:

InterfaceFactory.newClassObject = new theClassDefinitionItNeedsToBe();

我在 python 中使用了这个 class。看起来像

InterfaceFactory.newClassObject = theClassDefinitionItNeedsToBe 

其中 theClassDefinitionItNeedsToBe 不是静态的 class 但确实扩展了 ParentClass。 java 对此的解释是我真正抓耳挠腮的。任何帮助将不胜感激。

你有一个成员变量newClassObject。你不能把它当作一个方法来调用,像这样:

// newClassObject is a variable, you can't call a variable using ...();
ParentClass x = newClassObject();

因为是classjava.lang.Class的实例,可以在上面调用java.lang.Class的方法;例如,创建一个新实例:

ParentClass x = newClassObject.newInstance();

你这样初始化newClassObject

InterfaceFactory.newClassObject = SomeClassThatExtendsParentClass.class;

或者,如果你在编译时不知道 class,你可以动态地做(例如,名称字符串可以来自配置文件):

String className = "com.mypackage.SomeClassName";

InterfaceFactory.newClassObject =
    (Class<? extends ParentClass>) Class.forName(className);