为啥Java反射对象必须有一个无参数的构造方法

其实也可以不提供,只不过这样的话构造对象的时候一定要先拿到有参数的构造方法,然后赋予参数再构建对象。比如package cn.mldn.demo; import java.lang.reflect.Constructor; class Person{ // CTRL + K private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person "; }} public class TestDemo{ public static void main(String args) throws Exception { Class\u0026lt;?\u0026gt; cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象 // 取得指定参数类型的构造方法 Constructor\u0026lt;?\u0026gt; cons = cls.getConstructor(String.class, int.class); Object obj = cons.newInstance("张三", 20); // 为构造方法传递参数 System.out.println(obj); }}
■网友
一般来说反射是这样实现的:Class class = Class.forName(className);Object object= class.newInstance();所以需要一个无参的构造器来生成对象(因为没有给初始值)。
■网友
【为啥Java反射对象必须有一个无参数的构造方法】 普通反射需要知道构造方法的参数,但也可以不调用构造方法,如Objenesis,这样就不用关心构造方法的参数。

■网友
没有这个说法,只是你反射命令用错了。


    推荐阅读