Мне нужно создать функцию, которая создает класс из произвольной строки и передает массив параметров фиксированному методу, называемому «render».
Проблема в том, что в зависимости от класса метод 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"))
Вызванный метод принимает в качестве аргументов две строки, поэтому работает следующее:
render.invoke(clazz, "first", "second")
Разве нельзя передать массив?