从scala列表中获取java对象数组
我正在使用ApacheReflection,有一个java方法的签名是从scala列表中获取java对象数组,scala,scala-java-interop,Scala,Scala Java Interop,我正在使用ApacheReflection,有一个java方法的签名是 public static Object invokeStaticMethod(Class cls, String methodName, Object[] args) 我的代码是 object Tobject { def echo(name: String) = println("echo 1") def echo2(name: String, arg: String) = println
public static Object invokeStaticMethod(Class cls, String methodName,
Object[] args)
我的代码是
object Tobject {
def echo(name: String) =
println("echo 1")
def echo2(name: String, arg: String) =
println ("echo 2")
}
class ApacheReflection extends FunSuite {
test("apache reflection") {
val factory = ClassUtils.getClass("Tobject")
MethodUtils.invokeStaticMethod(factory,"echo2", List("sf", "f").asJava)
}
}
我收到了异常信息
No such accessible method: echo2() on class: Tobject
java.lang.NoSuchMethodException: No such accessible method: echo2() on class: Tobject
似乎asJava可以将scala列表转换为java列表,但不能转换为数组,那么如何从scala列表中获取java数组呢?使用的想法。toArray是一个很好的尝试。但是它给出了数组[String](=String[]在Java中),这与Java的数组[Object](=Object[])不同。另一方面,如果您使用
List("sf", "f").toArray[Object]
一切正常。AFAIK,scala使用java中的数组。所以只要把list.toArray转换一下就够了,我知道。但是list.toArray不起作用。问题是invokeStaticMethod有两个重载方法。第一个参数是object,第二个参数是object[]。不管我给它什么样的论证,它只是把我的论证当作对象。