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

标签 java scala reflection

我需要创建一个函数,该函数从任意字符串创建一个类,并将参数数组传递给名为“render”的固定方法。 问题是,根据类的不同,“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")

那么是不是就不能传递数组了?

最佳答案

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)

关于java - 将任意参数的数组传递给通过反射调用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9836128/

相关文章:

Java 泛型 : array creation, 类型转换和未经检查的警告

java - Google Cloud Endpoints - 在资源 getter 中返回另一个资源

java - 作为一个称职的 scala 程序员是否需要你成为一个称职的 java 程序员?

mysql - 使用 Slick 3.0 连接到 Mysql - No username, no password and bogus driver does not equal error

json - @JsonIgnore 在 Scala 案例类中不起作用

java - 如何通过反射获取内部类中存在的枚举的值

java - 我如何使用 Java 实现暴力攻击 TripleDES?

java - 在java中打开附加到eclipse项目的文件

java - Android:如何在不使用 map Activity 的情况下实现 com.google.android.gms.maps.MapView

reflection - 在 F# 引号内嵌入变量