Единственный способ (кроме рефлексии) - всегда использовать тип интерфейса для взаимодействия с классом;например,
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
.