2010-08-25 13 views

回答

2

唯一的方法(除了反射)是总是使用接口类型与类交互;例如

public interface I { 
    public void foo(); 
} 

public class C implements I { 
    public void foo(){ ... } 
} 

... 
Classloader l1 = ... 
I c1 = (I) l1.loadClass("some.pkg.C").newInstance(); 
c1.foo(); 

Classloader l2 = ... 
I c2 = (I) l2.loadClass("some.pkg.C").newInstance(); 
c2.foo(); 

接口I必须通过的l1l2一个共同的祖先类加载器加载。假设这些类加载器(l1l2)实际加载了类,则不能将c1c2加到C

+0

感谢您的回复。 我使用JndiObjectFactoryBean来获取被其他Web应用程序绑定的服务实例,并且我直接将由JndiObjectFactoryBean代理的实例转换为类型,它运行良好,并且不引发ClassCastException。 JndiObjectFactoryBean如何工作? 使用代理可以解决这个问题吗? – SuoNayi 2010-08-25 04:27:19

+0

我不知道在这种情况下代理是否有帮助。你为什么不尝试它? – 2010-08-25 04:46:23

相关问题