1

我有 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”上得到“假”?

例外:

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

希望你能帮忙!

问候,

马丁

4

1 回答 1

3

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

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

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

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

于 2013-03-05T18:28:08.167 回答