我想用list参数调用函数,这是代码:
class A {
def cat(s1: String, s2: String) = s1 + " " + s2
}
val a = new A
val mylist = Array("hello","guys")
val argtypes = mylist.map(_.getClass)
val method = a.getClass.getMethod("cat",argtypes: _*)
method.invoke(a,argtypes: _*)
但我收到错误:
java.lang.IllegalArgumentException:参数类型不匹配 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:606)
我该怎么做?
答案 0 :(得分:3)
invoke method的参数是调用该方法的对象,后跟该方法的实际参数列表。在您的情况下,您传递的是参数的类对象而不是实际的对象。所以下面应该有用。
scala> method.invoke(a, mylist: _*)
res3: Object = hello guys