2012-03-23 92 views
0

我需要創建一個函數,它可以從任意字符串中創建一個類,並將參數數組傳遞給名爲「render」的固定方法。 問題是,根據類的「渲染」方法可能需要不同數量的參數。不幸的是,「渲染」方法不能改變接受可變參數,所以我想知道如果我仍然可以作爲一個數組傳遞參數?將任意參數數組傳遞給通過反射調用的方法

這產生了:

這裏: 「java.lang.IllegalArgumentException異常的參數錯號」 的代碼:

def perform(strClazz: String, pTypes: Array[Class[_]], params: Array[Object]) = { 
    val clazz = MyClassLoader.loadClass(strClazz) 
    val render = clazz.getDeclaredMethod("render", pTypes: _*) 
    // params: java.lang.IllegalArgumentException: wrong number of arguments 
    render.invoke(clazz, params) 
} 

而且我通過調用它:

perform("MyClass",Array[Class[_]](classOf[String], classOf[String]),Array[Any]("first", "second")) 

被調用的方法需要兩個字符串作爲參數,所以下面的工作:

render.invoke(clazz, "first", "second") 

然後是不可能傳遞數組嗎?

+1

params.asInstanceOf [Array [Object]]:_ *做的伎倆 – recalcitrant 2012-03-23 09:09:35

回答

2
scala> class Foo { def f(s: String, i: Int): Unit =() } 
defined class Foo 

scala> classOf[Foo].getDeclaredMethod("f", Array(classOf[String], classOf[Int]):_*) 
res0: java.lang.reflect.Method = public void Foo.f(java.lang.String,int) 
相關問題