【问题标题】:Scala: argument type mismatch when invoke list parametersScala:调用列表参数时参数类型不匹配
【发布时间】:2017-10-31 18:31:51
【问题描述】:

我想用列表参数调用函数,代码如下:

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) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606)

我该怎么做?

【问题讨论】:

    标签: scala reflection


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 2014-07-01
      相关资源
      最近更新 更多