如何从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); }