如何访问由其他类加载器异常加载的对象实例以使用反射?

时间:2010-08-25 03:04:47

标签: java classloader

我很困惑,除了使用反射之外,如何在不抛出ClassCastExcepion的情况下访问其他类加载器加载的对象实例? 似乎使用JndiObjectFactoryBean是一个更好的主意,但我不明白。 有没有人可以让我清楚? 非常感谢。

1 个答案:

答案 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必须由l1l2的共同祖先类加载器加载。假设这些类加载器(l1l2)实际加载了类,则无法将c1c2强制转换为C