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

时间:2013-03-24 18:34:26

标签: java reflection

我有一堂课演示:

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. 删除了类文件并重新编译
  2. boolean success = (new File ("filename")).delete();

    但仍未获得更新消息......我该怎么办?

1 个答案:

答案 0 :(得分:3)

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

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

查看thisthat了解更多信息。