Scala - 从 Java 反射调用私有静态方法
Scala - reflectively invoke private static method from Java
我正在尝试从 Java class 中获取 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
类型的 class 对象。
val aMethod: Method = blockClass.getDeclaredMethod("a", classOf[Int], classOf[String], classOf[Block])
我正在尝试从 Java class 中获取 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
类型的 class 对象。
val aMethod: Method = blockClass.getDeclaredMethod("a", classOf[Int], classOf[String], classOf[Block])