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



我试图从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 int,而Integer.TYPE是我能想到的唯一可以得到Java int的东西。

任何想法?

不确定为什么会发生错误,但可以通过显式地将145转换为AnyRef(与Object相同)来修复:

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

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

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

相关内容

  • 没有找到相关文章

最新更新