在程序运行过程中使用Class.forName("A")动态生成了一个名为A的类,我想替换A内的实现重写了A。将其放置于类路径下,希望再次执行到Class.forName("A")时,使用新的实现类A。可是在第一次Class.forName("A")后,A的类对象已经加载到
某个地方,第二次Class.forName("A")时,并没有去类路径下搜索,而是取第一次保存下来的类对象。请问有没有办法实现
每次获取类对象时,都到类路径下查找而不用使用已加载的。

解决方案 »

  1.   

    那可以用匿名类:
    A a = new A() {
      public void method() {
      }
    }
      

  2.   

    Class c=A.class不知行不行?
      

  3.   

    我的问题应该归纳为:类的热部署问题。
    大家有兴趣可以看看这个http://blog.chinaunix.net/u2/84562/showart_1714647.html
      

  4.   


    替换的是编译过的.class文件,不是.java文件
      

  5.   


    Class c = Class.forName("A的类路径");
    A  a = (A)c.newInstance();
      

  6.   

    你这个重写的A类,是不是在程序中生成一个新的Java文件,然后再通过这种反射的机制动态编译他?如果是使用到反射的机制话,可以参考Apache的官方网站,其中的commons组件可以解决你这些问题。