[Java] 我可以在構造函數參數中使用Class.newInstance()嗎?


Answers

myObject.getClass().getDeclaredConstructors(types list).newInstance(args list);

編輯:根據評論似乎指向類和方法名稱是不夠的一些用戶。 有關更多信息,請查看獲取構造函數調用它的文檔。

Question

我想使用Class.newInstance()但我實例化的類沒有空的構造函數。 因此我需要能夠傳入構造函數參數。 有沒有辦法做到這一點?




按照以下步驟調用參數化構造函數。

  1. 通過在Class[]Class getDeclaredConstructor方法傳遞類型來獲取具有參數類型的Constructor函數
  2. 通過在Object[]傳遞值來創建構造函數實例
    Constructor newInstance方法

示例代碼:

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[]{""});

    }
}

輸出:

java NewInstanceWithReflection
Default constructor
Constructor :String =>