我试图使用Reflection来声明ArrayList
。下面是我的代码NoSuchMethodException java.lang.Integer的参数在构造函数中传递(Reflection)
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException {
String intClass="java.lang.Integer"; //This string will be replaced by a string taken from user which will be a class name.
Class classOf=Class.forName("java.util.ArrayList");
Class[] parameterslist ={Class.forName(intClass)};
Constructor constructorOfClass=classOf.getConstructor(parameterslist);
}
当我运行这段代码,我得到
Exception in thread "main" java.lang.NoSuchMethodException: java.util.ArrayList.<init>(java.lang.Integer)
当我修改parameterslist作为
Class[] parameterslist={int.class}
它的工作原理,但我必须考虑的参数类的名称从用户输入,所以我不能直接写int.class
。
我已经搜索了Class.forName()
和Classname.class
之间的区别,但像this这样的答案认为它们是相同的。 我只想知道为什么我们不能使用Class.forName()
对象作为参数传递给ArrayList
构造函数,当我编写int.class
时它是如何工作的?如果Class.forName()
不是正确的方法,那么我们如何才能将一个类名的对象作为用户的输入?
嗯,有一些原始类型。如果我是你,我会创建一个映射,并使用基本类型的名称作为键和相应的'Class'对象作为值。 – Sweeper
@Sweeper你是对的。这将解决问题,但仍然为什么我们不能为此使用Class.forname? – Ahsan
我不明白。您已将类名java.lang.Integer硬编码到此代码中。用户输入来自哪里?或'Class.forName()'?这里''Class.forName()'唯一的错误是你提供给它的参数。不清楚你在问什么。 – EJP