我试图宣布ArrayList使用反射.以下是我的代码
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);
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我得到了
Exception in thread "main" java.lang.NoSuchMethodException: java.util.ArrayList.<init>(java.lang.Integer)
Run Code Online (Sandbox Code Playgroud)
当我修改参数列表为
Class[] parameterslist={int.class}
Run Code Online (Sandbox Code Playgroud)
它的工作原理,但我必须将参数类的名称作为用户的输入,所以我不能直接写int.class.
我已经搜查约之间的区别Class.forName()和Classname.class但像回答这样认为,他们是一样的.我只是想知道为什么我们不能使用Class.forName()object作为参数传递给ArrayList构造函数,以及它在我编写时如何工作int.class?如果Class.forName()不是正确的方法,那么我们如何才能将类名的对象作为用户的输入?