Scala - 反射性地从Java调用私有静态方法

时间:2015-09-28 07:09:47

标签: java scala reflection

我正在尝试从Java类中获取private static方法并在Scala中调用它。这是我到目前为止的代码:

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 intInteger.TYPE是我能想到的唯一一个获得Java int的东西。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

不确定错误发生的原因,但只需将145转换为AnyRef(与Object明确相同)即可解决此问题:

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

答案 1 :(得分:0)

请尝试使用Integer.TYPE,而不要使用classOf[Int]。这将为您提供Scala的Int类型的类对象。

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