2013-03-25 81 views
0

我有一組類:TestClass1,TestClass2TestClass3。所有這些類都從類MainTestClass繼承。類TestClass1,TestClass2TestClass3具有不同的構造函數。例如:調用未知參數的構造函數

TestClass1(String s) 
TestClass2(Integer i) 
TestClass3(Double d) 

類可以有多個構造函數 - 每個構造函數都不同於其他構造函數。

現在我想隨機創建這些類的實例並將它們存儲在List中。爲此,我將對象TestClass1,...使用TestClass1.class,...存儲在列表中。然後,我得到例如每個類的第一個構造函數,它具有非零參數count。現在,當我想使用newInstance()方法創建對象時,我不知道傳遞給此特定構造函數的參數的類型和數量。

是否有可能使用反射來實現這樣的效果?我一直在思考着什麼樣

setConstructorArgument(int number, Object value) 

setConstructorArguments(Object[] arguments) 

做類似的方法都存在的Java?

+3

[構造函數對象有一個newInstance](http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Constructor.html#newInstance(java.lang.Object ...) ))需要參數的方法。你也可以通過構造函數來獲取參數類型和數量。 – BevynQ 2013-03-25 00:28:16

+0

好吧,我的錯。我不知道,你可以用'Object [] initargs'替代'Object ... initargs'。你可以發表你的評論作爲答案,我會接受它作爲正確的。謝謝 :) – Hfaua 2013-03-25 00:51:09

回答

2

構造函數對象有一個newInstance方法,該方法可以帶參數來構造它所屬的類 。顯然參數必須與getParameterTypes方法可以提供的那些參數預期的 相匹配。

對象... initargs事實上確實意味着對象[] initargs,但它允許語法

newInstance(param1, param2, param3); 

以及

newInstance(new Object[]{param1, param2, param3}); 

你也應該記住,

newInstance(null); 

並不意味着

newInstance(new Object[]{null}); 

其中不時發現人。

個人我不喜歡varargs,但c'est la vie。

相關問題