使用反射呼叫過載的建構函式

示例:通過傳遞相關引數來呼叫不同的建構函式

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