我们可以使用反射来创建对象。假设我在包p中有一个“Employee”类
Employee emp = Employee.class.newInstance() OR
Employee emp = (Employee)Class.forName("p.Employee").newInstance()
上面的代码行将通过调用Employee的default或no-arg构造函数来创建Employee对象。然后我通过调用Employee的 通过在构造函数本身中赋值,即通过调用参数化构造函数,有没有办法使用反射创建对象?
答案 0 :(得分:2)
是的,我们假设Foo
有一个接受单个字符串作为参数的构造函数。然后使用以下代码给出一个使用该构造函数的实例:
Class<?> fooClass = Foo.class;
Constructor<?> constructor = fooClass.getConstructor(String.class);
Object obj = constructor.newInstance("hello");
答案 1 :(得分:1)
查看Class.getConstructor和Constructor。
首先,通过参数类型获得正确的构造函数,然后使用该类型的参数调用它:
Constructor<Employee> constructor = Class.forName("p.Employee").getConstructor(Integer.class, String.class);
Employee employee = constructor.newInstance(1,"foo");