程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> java反射問題-關於Class和Construction中的newInstance問題

java反射問題-關於Class和Construction中的newInstance問題

編輯:編程綜合問答
關於Class和Construction中的newInstance問題

最近自學java看的張孝祥老師的視頻
視頻中講到反射這一課時 張老師舉了一個例子
Class cl=Class.forName("java.lang.String");
Constructor con=cl.getConstructor(StringBuffer.class);
然後自己練習
當寫完這一行代碼的時候
Constructor con=cl.getConstructor(StringBuffer.class);
eclipse 報錯
The method getConstructor(Class[]) in the type Class is not applicable for the arguments (Class)
但是在原視頻中 並沒有報錯 (張老師用的是myeclipse)
然後百度搜索問題 得知
Constructor con=cl.getConstructor(StringBuffer.class);
應該寫成
Constructor con=cl.getConstructor(new Class[]{StringBuffer.class});
不明所以 接著寫下面的代碼
String str=(String)con.newInstance(new StringBuffer("123"));
eclipse接著報錯
The method newInstance(Object[]) in the type Constructor is not applicable for the arguments (StringBuffer)
參照上面的解決方式把代碼改成
String str=(String)con.newInstance(new Object[]{new StringBuffer("123")});
eclipse就編譯通過了
但是當我自定義一個person類時 person類中有一個構造函數
person(String name,int age)
再用constructor.newInstance創建person對象時 卻不知道該如何下手了 求解答

最佳回答:


怎麼可能呢?是你jdk的原因?

public Constructor<T> getConstructor(Class<?>... parameterTypes)

是可變參數,不用建個Class數組啊
我敲了一下,完全沒有問題啊

Class<?> cl = Class.forName("java.lang.String");
Constructor<?> con = cl.getConstructor(StringBuffer.class);
String str = (String) con.newInstance(new StringBuffer("123"));
System.out.println(str);

Class<?> personClz = Class.forName("com.jerome.basic.beans.Person");
Constructor<?> personCon = personClz.getConstructor(String.class,
                int.class);
Person person = (Person) personCon.newInstance("Jerome", 24);
System.out.println(person.toString());

console out:

123
Person [name=Jerome, age=24]
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved