我们如何创建具有参数化的类的对象 构造函数,类的名称将在给我们 运行时命令行参数。
这一行是什么意思
new Class [] {String.class}
和String和String.class有什么区别?
答案 0 :(得分:0)
Class c = Class.forName(args [0]);
这会得到一个Class<?>
对象......
构造函数ctr = c.getDeclaredConstructor(new Class [] {String.class})
,这将获得该类的构造函数,该参数是单个String。
完成后,您可以调用ctr.newInstance(someString)
。
你有一个问题,因为你真的不知道这里的课程。你应该至少知道一个共同的子类型,否则你所得到的只是Object
......
答案 1 :(得分:0)
Class.getDeclaredConstructor
的JavaDoc非常清楚:
返回一个
Constructor
对象,该对象反映此Class
对象所表示的类或接口的指定构造函数。parameterTypes
参数是Class
个对象的数组,用于按声明的顺序标识构造函数的形式参数类型。
...所以在你的情况下,它得到一个Constructor
对象,它代表一个带有一个参数的构造函数,这是一个String
(new Class[] {String.class}
构造一个Class[]
单个条目,它是表示Class
的{{1}}个对象。您可以在该对象上调用java.lang.String
以调用构造函数并返回目标类的新实例。
在实践中,您可能需要使用newInstance("some string")
而不是getConstructor
,因为后者将返回与指定参数类型匹配的任何构造函数,包括通常不会可从外部访问(例如getDeclaredConstructor
个)。相反,private
只返回getConstructor
个构造函数。
答案 2 :(得分:0)
1-使用反射在运行时创建类实例:
Class classToInstantiate = Class.forName(className);
Constructor<?> theClassInstructor = classToInstantiate.getDeclaredConstructor(<parametersClasses>);
Object instance = theClassInstructor.newInstance(<parameters>);
使用:
parametersClasses
构造函数参数的类数组,例如,如果构造函数使用您编写的String和Integer参数:getDeclaredConstructor(new Class[]{String.class,Integer.class});
parameters
是实例化时要使用的参数的实际值。