Java Reflection使最终方法不是最终的

时间:2018-01-10 16:05:13

标签: java android reflection

我知道通过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())
    }

1 个答案:

答案 0 :(得分:1)

这是不可能的,因为反射只会对已编译的数据起作用。
您无法在运行时修改编译,因为您没有使用脚本语言进行编程。我们谈论Java,它是一种编译语言,需要使用机器更简单的语言进行翻译,JVM可以比代码本身更快地解释。
你可以直接管理运行时的字节码,this answer提供了一个很好的起点。