Java 如何用Class.forName实例化对象并将其转换为正确的类型?

Java 如何用Class.forName实例化对象并将其转换为正确的类型?,java,class,Java,Class,我读过这篇文章: 现在我知道怎么做了: MySuperClass mClass = new MySuperClass(); 还是这个 ... mClass = new ...(); // The subclass name in place of "..." can be determined at runtime. 在MyClass中编写一个静态块 现在,当您通过class加载类时,将执行静态块 因此,将对象创建保持在静态块内您可以使用IsAssignableFrom方法确定子块,然后初

我读过这篇文章: 现在我知道怎么做了:

MySuperClass mClass = new MySuperClass();

还是这个

... mClass = new ...(); // The subclass name in place of "..." can be determined at runtime.

在MyClass中编写一个静态块

现在,当您通过
class加载类时,将执行静态块


因此,将对象创建保持在静态块内

您可以使用IsAssignableFrom方法确定子块,然后初始化对象

public void checkSubClassOfSuperClass(Class subClas){   

     if (subClas != SuperClass.class && SuperClass.class.isAssignableFrom(subClas)) {
         // initialize and assign operation
     }
}

你对全班同学都有正确的想法

对于
MySuperClass mClass=new…()代码,假设您的名称存储在字符串中,我们将其命名为
className

Class<?> subClass = Class.forName(className);
MySuperClass mClass = (MySuperClass) subClass.newInstance();
Class subClass=Class.forName(className);
MySuperClass mClass=(MySuperClass)子类.newInstance();
请注意,className还可以包含如中所示的包


正如您所看到的,代码与之前的代码非常相似,只是您必须将子类强制转换为超类。或者,您可以将其设置为对象,但功能有限。

只是一个附带问题-您确定要将其保存为MySuperClass吗?如果这样做,子类中可用的单个方法将无法通过McClass提供给您。@Bucco我更改了我的问题描述,它不必是MySuperClass。但我仍然不知道如何在运行时转换它。你能帮帮我吗?啊,我现在明白你问题的含义了。我不可能做到我要求你做的事(the…mClass=new…();)或者至少尽我所能是不可能的。我会把答案贴到我的上级部分。有趣的问题!谢谢你在包裹上的警告^^可选选项:
subclass.asSubclass(MySuperClass.class).newInstance()
,不需要强制转换。
public void checkSubClassOfSuperClass(Class subClas){   

     if (subClas != SuperClass.class && SuperClass.class.isAssignableFrom(subClas)) {
         // initialize and assign operation
     }
}
Class<?> subClass = Class.forName(className);
MySuperClass mClass = (MySuperClass) subClass.newInstance();