2015-07-19 41 views
1

我與Apache反射使用的Java對象數組,並有一個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 ("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 

它似乎是Java可以將Scala列表轉換爲java列表而不是數組,所以我怎樣才能獲得java數組fr om scala列表?

+0

AFAIK,scala使用java中的數組。所以只需轉換list.toArray,這就夠了。 – Zernike

+0

我知道。但是list.toArray不起作用。關鍵是invokeStaticMethod有兩個重載方法。第一個以object爲參數,第二個以object []爲參數。無論我給出什麼論點,都只是將我的論點視爲客體。 –

回答

1

使用.toArray的想法是一個很好的嘗試。但它給陣列[字符串](= 字符串[]在Java中),這是不一樣的數組[對象](= 對象[])爲Java。另一方面,如果您使用

List("sf", "f").toArray[Object] 

一切正常。

+0

它的工作原理,謝謝! –