gpt4 book ai didi

java - java 反射的调用方法在该方法发生更改时不会在运行时更新该方法

转载 作者:行者123 更新时间:2023-12-01 23:56:02 25 4
gpt4 key购买 nike

我有一个类演示:

public class Demo {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

在运行时我调用方法main:

    Class cls = Class.forName(packClassName);
Method thisMethod = cls.getMethod("main", String[].class);
thisMethod.setAccessible(true);
thisMethod.invoke(cls.newInstance(), (Object)str);

它打印“Hello World!”信息。现在,过了一段时间,我更改了演示类的打印消息,例如“Hello java”而不是“Hello World!”并再次编译Demo类。现在我再次使用与上面相同的代码调用该方法,但我无法获取更新的消息。它会打印“Hello World!”我如何打印更新的消息。请帮助我。

现在,我刚刚做了两件事: 1.实例化另一个新的ClassLoader实例

 cls = Class.forName("anotherClassName");
  1. 删除类文件并重新编译

boolean success = (new File ("文件名")).delete();

但仍然没有收到更新消息...我该怎么办?

最佳答案

一旦类加载器导入了您的类,它就不会再改变。据我所知,没有办法卸载这样的类。因此,您无法更改正在加载的类。

我能想到的唯一方法是您是否可以实例化另一个尚未加载该类的新ClassLoader实例。

查看thisthat了解更多。

关于java - java 反射的调用方法在该方法发生更改时不会在运行时更新该方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com