如何将 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);
所以我正在尝试与我拥有的一些遗留代码进行交互。这是我正在尝试使用的 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);