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

关注者
10
被浏览
12,512

4 个回答

其实也可以不提供,只不过这样的话构造对象的时候一定要先拿到有参数的构造方法,然后赋予参数再构建对象。

比如

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 [name=" + name + ", age=" + age + "]";
    }
}
 
public class TestDemo
{
    public static void main(String[] args) throws Exception
    {
        Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象
        // 取得指定参数类型的构造方法
        Constructor<?> 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();

所以需要一个无参的构造器来生成对象(因为没有给初始值)。