我很困惑,除了使用反射之外,如何在不抛出ClassCastExcepion的情况下访问其他类加载器加载的对象实例? 似乎使用JndiObjectFactoryBean是一个更好的主意,但我不明白。 有没有人可以让我清楚? 非常感谢。
答案 0 :(得分: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
必须由l1
和l2
的共同祖先类加载器加载。假设这些类加载器(l1
和l2
)实际加载了类,则无法将c1
或c2
强制转换为C
。