使用反射调用重载的构造函数

示例:通过传递相关参数来调用不同的构造函数

import java.lang.reflect.*;

class NewInstanceWithReflection{
    public NewInstanceWithReflection(){
        System.out.println("Default constructor");
    }
    public NewInstanceWithReflection( String a){
        System.out.println("Constructor :String => "+a);
    }
    public static void main(String args[]) throws Exception {
        
        NewInstanceWithReflection object = (NewInstanceWithReflection)Class.forName("NewInstanceWithReflection").newInstance();
        Constructor constructor = NewInstanceWithReflection.class.getDeclaredConstructor( new Class[] {String.class});
        NewInstanceWithReflection object1 = (NewInstanceWithReflection)constructor.newInstance(new Object[]{"StackOverFlow"});
        
    }
}

输出:

Default constructor
Constructor :String => StackOverFlow

说明:

  1. 使用 Class.forName 创建类的实例:它调用默认构造函数
  2. 通过传递参数类型 Class array 来调用类的 getDeclaredConstructor
  3. 获取构造函数后,通过传递参数值为 Object array 来创建 newInstance