1

我在 SO 上遇到了许多类似的问题,但仍在试图弄清楚我们是否可以在运行时替换方法体,以及是否可以通过对该方法的现有调用来执行修改后的方法。

在阅读了许多类似问题的答案后,我了解到我们可以在运行时替换任何用户定义的类。然后我们可以加载修改后的类(例如,修改后的类中有修改的方法),创建该类的实例,并调用修改后的方法。这个问题的公认答案对我理解这个概念非常有帮助。

基本上,该答案中使用的示例解释说,如果我们更改Test1.hello(),那将由类中的main方法选择,Test因为它正在创建Test1类的新实例并通过该实例调用 hello。

Class cls = new TestClassLoader().loadClass("test.Test1");
Object obj = cls.newInstance();
cls.getMethod("hello").invoke(obj);

但是可能存在一些情况,hello()代码库中存在许多现有调用(例如 in Test2.java),我们希望在Test1动态加载类之后,所有现有调用都Test2将执行修改后的方法,而不是旧的.

我想知道这是否可能,或者我是否遗漏了什么。

提前非常感谢。

4

0 回答 0