2016-04-26 147 views
0

我有一個類可能需要1到4個參數。他們總是字符串。我想根據傳遞給函數的參數數量來創建這個類的一個對象。有沒有什麼辦法可以創建構造函數並將對象數組直接傳遞給newInstance?在Scala反射中創建帶參數構造函數的類

 NewInstanceWithReflection clazz = (NewInstanceWithReflection)Class.forName("NewInstanceWithReflection").newInstance(); 
     Constructor constructor = NewInstanceWithReflection.class.getDeclaredConstructor(new Class[] {String.class}); 
     NewInstanceWithReflection object1 = (NewInstanceWithReflection)clazz.newInstance(new Object[]{"StackOverFlow"}); 

此代碼粘貼到sbt解釋器似乎並不工作。任何幫助讚賞。

回答

0

你明白了(更不用說,它是java的語法,而不是scala)。 像這樣的東西應該在斯卡拉工作:

classOf[NewInstanceWithReflection] 
    .getDeclaredConstructor(classOf[String]) 
    .newInstance("StackOverFlow") 

這就是你需要在Java什麼:

NewInstanceWithReflection 
    .class 
    .getDeclaredConstructor(String.class) 
    .newInstance("StackOverFlow") 
+0

對不起,我搞砸了我的代碼示例。我只想知道是否可以跳過'.getDeclaredConstructor(classOf [String])',因爲String args的數量可能會從1到4變化,只是將動態數量的args傳遞給'newInstance'方法。 – NNamed

+0

不,這是不可能的......'newInstance'是'Constructor'對象上的一個方法。你需要擁有這個對象才能調用它的一個方法。所以,「跳過」獲取對象實例是行不通的。 – Dima

相關問題