首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 反射 Constructor.newInstance 參數傳遞:可變參數語法與多參構造器實例化示例

     編輯:程式設計綜合問答

問題回顧

Eclipse 報錯 The method getConstructor(Class[]) ... not applicable for the arguments (Class),實為 JDK 版本差異誤導。實際 getConstructor(Class... parameterTypes) 是可變參數,直接傳 StringBuffer.class 即可,無需包裝數組。

正確代碼 (JDK 8+ 驗證)


// 單參構造器
Class cl = Class.forName("java.lang.String");
Constructor con = cl.getConstructor(StringBuffer.class); // 可變參數
String str = (String) con.newInstance(new StringBuffer("123"));

// 多參構造器:Person(String name, int age)
Class pClz = Class.forName("com.example.Person");
Constructor pCon = pClz.getConstructor(String.class, int.class); // 依次傳參數類型
Person person = (Person) pCon.newInstance("Jerome", 24); // 依次傳實參

關鍵點

  • getConstructor / newInstance 均為可變參數,按參數聲明順序依次傳遞即可。
  • 基本類型傳 int.class、double.class 等 Class<?> 對象。
  • 異常處理:捕獲 NoSuchMethodException、InvocationTargetException、InstantiationException、IllegalAccessException。

最佳實踐

反射實例化屬於運行時行為,編譯期無法檢查參數匹配。建議封裝工具類統一異常處理與日誌,生產環境優先使用構造器直接調用或依賴注入框架。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved