如何从Java中的类名获取类对象

我知道类名,说“MyClass”并想要检索Class对象,即。 MyClass.class以供将来参考。 有没有办法做到这一点?

我已经浏览了网页,但我发现的大部分内容都与ClassLoader ,我认为这不适合我的情况。 我不想初始化一个类,但只获取一个类对象以供将来使用。

编辑:关于这个的第一个答案:

我已经检查了forName()方法,但我认为这也应该初始化类。 现在我可以使用完整的参数调用它并将false传递给第二个参数,但第三个参数必须为null或者是什么?

 Class.forName("MyClass", false, null); 

返回MyClass.class

事实上,我想要做的是替换与Class对象关联的String ID数组,以及从中自动获取类对象的ID数组,以摆脱一些手动工作:)

感谢您的快速回答,并且抱歉之前没有提及此问题。

您可以使用:

 Class c = Class.forName("com.package.MyClass"); 

然后实例化一个对象:

 Object obj = c.newInstance(); 

编辑:这只是最简单的用例。 如注释中所示,您将需要考虑初始化过程抛出的构造函数参数和exception。 newInstance的JavaDocs具有所有细节。

 Class.forName("MyClass") 

阅读JavaDoc以获取详细信息

听起来你可能能够使用Class类的静态forName方法 。

值得注意的是,上述建议是正确的,但仅适用于默认(无参数)构造函数。 你也可以这样做:

  public Object newInstance(String className, Object...args) throws Exception { Class clazz = Class.forName(className); if(args == null || args.length == 0) { return clazz.newInstance(); } List> argTypes = new ArrayList>(); for(Object object : args) { argTypes.add(object.getClass()); } Constructor explicitConstructor = clazz.getConstructor(argTypes.toArray(new Class[argTypes.size()])); return explicitConstructor.newInstance(args); }