Scala:调用列表参数时参数类型不匹配

时间:2017-05-31 05:41:47

标签: scala reflection

我想用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)

我该怎么做?

1 个答案:

答案 0 :(得分:3)

invoke method的参数是调用该方法的对象,后跟该方法的实际参数列表。在您的情况下,您传递的是参数的类对象而不是实际的对象。所以下面应该有用。

scala> method.invoke(a, mylist: _*)
res3: Object = hello guys