質問

私はC#プロジェクトをJavaに移植する過程にあります。私はこのように見えるコードの塊を持っています:

public abstract class A
{
    public abstract void foo() throws Exception;
    public abstract void bar();
}

そして、他の場所...

public class FirstOuterClass {
    public class FirstInnerClass extends A {
                  // defines foo() and bar()
    }
}

さらに他の場所...

public class SecondOuterClass {    
     public class SecondInnerClass extends A {
                  // defines foo() and bar()
    }
}

そして最後に、さらに他の場所で...

HashMap<Type, A> handlers = new HashMap<Type, A>();
        for (Entry e : HashMapOfStringToEntry.getTypes())
        {       
            if(e.Handler != null) {
                handlers.put(e.Type, (A) e.Handler);
            }
        }

E.Handlerは、FirstInnerclassの一種またはSecondinnerclassのいずれかです。次のエラーを引き起こしているのは、その会話e.handlerから(a)です。

java.lang.ClassCastException: java.lang.Class

E.Handlerが実際にFirstouterClass $ FirstInnerClassのクラスタイプであることをデバッグ出力で確認しました。したがって、C#&Java(可能性)の間に鋳造に違いがあるか、どこかに適切な構文を提供していません(また可能)。

(ハッシュマップが何であるかのように、コード全体を貼り付けていないことを申し訳ありません。実際の問題を混乱させたくありません。基本的に、文字列キーと抽象的なクラスのマッピングです。)

役に立ちましたか?

解決

あなたの内側のクラスの1つがキャストできなかった場合 A, 、それからあなたの例外は次のようになります:

java.lang.classcastexception:firstouterclass $ firstinnerclassはにキャストできません

代わりに、あなたはこれを取得しています:

java.lang.classcastexception:java.lang.class

これの終わりに、「キャストできません」と断ち切っていますか?

とにかく、それはそうです e.Handler タイプです java.lang.Class. 。のように、 FirstOuterClass$FirstInnerClass 単一のインスタンスではなく、それ自体。

他のヒント

例外メッセージから、あなたがのインスタンスをキャストしようとしているように見えます Class, 、それが表すクラスのインスタンスではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top