我知道如何通过反射使Field不是最终的。但是有没有办法让一个方法成为非final的呢?不知何故,同样的方法并不起作用。
// 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())
}发布于 2018-01-11 00:19:23
这是不可能的,因为反射只作用于已经编译的数据。
您不能在运行时修改编译,因为您没有使用脚本语言进行编程。我们谈论的是Java,它是一种编译语言,需要翻译成一种机器更简单的语言,JVM可以比代码本身更快地解释这种语言。
您可以直接管理运行时的字节码,this answer提供了一个很好的起点。
https://stackoverflow.com/questions/48191501
复制相似问题