关于向上转换的ClassCastException

时间:2013-03-05 18:21:43

标签: java casting classcastexception

我有两个类:SubEditor和Editor。

public class SubEditor extends Editor {

我正在创建一个SubEditor对象并尝试将其强制转换为编辑器,但我会得到一个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

希望你能帮忙!

问候,

马丁

1 个答案:

答案 0 :(得分:3)

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

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

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

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