我知道通过Reflection进行Field
非决赛的方法。但有没有办法让方法不是最终的?不知怎的,同样的方法不起作用。
// make all methods non-final
Clazz.javaClass.declaredMethods.forEach { method ->
method.isAccessible = true
val modifiersField = method.javaClass.getDeclaredField("modifiers")
modifiersField.isAccessible = true
modifiersField.setInt(method, modifiersField.modifiers and Modifier.FINAL.inv())
}
答案 0 :(得分:1)
这是不可能的,因为反射只会对已编译的数据起作用。
您无法在运行时修改编译,因为您没有使用脚本语言进行编程。我们谈论Java,它是一种编译语言,需要使用机器更简单的语言进行翻译,JVM可以比代码本身更快地解释。
你可以直接管理运行时的字节码,this answer提供了一个很好的起点。