2015-09-28 55 views
0

我試圖從Java類中取出private static方法並在Scala中調用它。下面的代碼我到目前爲止:斯卡拉 - 反思地調用Java中的私有靜態方法

val blockClass = classOf[Block] 
val aMethod: Method = blockClass.getDeclaredMethod("a", Integer.TYPE, classOf[String], classOf[Block]) 
aMethod.setAccessible(true) 

aMethod.invoke(null, 145, "anvil", anvilPatch) 

當我嘗試編譯這一點,但是,我得到這個錯誤:

Error: the result type of an implicit conversion must be more specific than AnyRef 
aMethod.invoke(null, 145, "anvil", null) 
        ^

145應該是一個Java int,而Integer.TYPE是隻有我能想到得到一個Java int

任何想法?

回答

1

不知道爲什麼錯誤發生,但它可以簡單地通過鑄造145AnyRef(這是一樣的Object)是固定的明確的:

aMethod.invoke(null, 145.asInstanceOf[AnyRef], "anvil", anvilPatch) 
0

而不是使用Integer.TYPE的,請嘗試使用classOf[Int]。這將爲您帶來Scala的Int類型的類對象。

val aMethod: Method = blockClass.getDeclaredMethod("a", classOf[Int], classOf[String], classOf[Block])