我有2个课程:SubEditor和Editor。

public class SubEditor extends Editor {

我正在创建SubEditor对象,并尝试将其强制转换为Editor,但是我将得到ClassCastException:

try {
    (Editor) ClassLoader.getSystemClassLoader().loadClass("bla.SubEditor").newInstance();
} catch (Exception ex) {
    try {
        Object object = ClassLoader.getSystemClassLoader().loadClass("bla.SubEditor").newInstance();

        // prints "false":
        System.out.println(object instanceof Editor);

        // prints "bla.SubEditor":
        System.out.println(object.getClass().getCanonicalName());

        // prints "Super: bla.Editor":
        System.out.println("Super: "+object.getClass().getSuperclass().getCanonicalName());
    } catch (Exception e) {
        // do sth
    }
}


我什至有可能在“ SubEditor instanceof Editor”上得到“ false”?

例外:

java.lang.ClassCastException: bla.SubEditor cannot be cast to bla.Editor

希望能对您有所帮助!

问候,

马丁

最佳答案

这两个类可能是使用不同的ClassLoader实例加载的。

我认为您可以通过比较两个类加载器来检查是否是这种情况:

Editor.getClassLoader().equals(ClassLoader.getSystemClassLoader())


使用不同的类加载器会导致两个不同的Class对象,因此ClassCastException

10-02 10:13