2012-03-23 66 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) 
相关问题