私は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のいずれかのタイプにすることができます。次のエラーを引き起こしているのは、(A)への会話e.Handlerです。
java.lang.ClassCastException: java.lang.Class
デバッグ出力で、e.Handlerが実際にFirstOuterClass$FirstInnerClassのクラスタイプであることを確認しました。したがって、C#とJavaのキャストに違いがあるか(可能)、またはどこかで正しい構文を提供していません(可能です)。
(HashMapsの目的のように、コード全体を貼り付けなかったことをお詫びします。実際の問題を混乱させたくありません。基本的には、文字列キーと抽象Aを拡張するいくつかのクラス間のマッピングです。)