1

SubEditor と Editor の 2 つのクラスがあります。

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

あなたが助けてくれることを願っています!

ご挨拶、

マーティン

4

1 に答える 1

3

2 つのクラスが異なる ClassLoader インスタンスを使用してロードされている可能性があります。

2 つのクラスローダーを比較することで、これが当てはまるかどうかを確認できると思います。

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

異なるクラス ローダーを使用すると、2 つの異なるClassオブジェクトが生成されます。ClassCastException

于 2013-03-05T18:28:08.167 に答える