親の抽象クラスにキャストを入力することは可能ですか?
-
29-09-2019 - |
質問
私は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
, 、それが表すクラスのインスタンスではありません。