繁体   English   中英

将一个任意参数数组传递给通过反射调用的方法

[英]Pass an Array of arbitrary arguments to a method invoked via reflection

我需要创建一个函数,该函数从任意字符串创建一个类,并将一个参数数组传递给一个名为“render”的固定方法。 问题在于,取决于类,“render”方法可能会采用不同数量的参数。 不幸的是,“渲染”方法无法更改为接受varargs所以我想知道我是否仍然可以将参数作为数组传递?

这会产生:“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"))

调用的方法将两个字符串作为参数,因此以下DOES可以工作:

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

那么传递数组是不可能的?

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM