2013-03-24 79 views
0

我有一个类演示:invoke方法当该方法已经被改变

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

在运行时我所说的方法主要:

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

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

,我刚才做了两件事: 1.实例又一新的ClassLoader实例

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

boolean success = (new File ("filename")).delete();

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

+3

删除你的.class文件并重新编译... – Frank 2013-03-24 18:35:46

+0

@Frank我删除了这个类,但仍然没有得到更新的输出... – 2013-03-24 19:17:18

+0

这是运行之间的问题吗? – TacB0sS 2013-03-24 20:24:06

回答

3

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

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

查看更多thisthat