私はJavaクラスを持っています。サブクラスのコンストラクタで追加のケースを処理するにはどうすればよいですか?
Class ClassA {
ClassA(int type)
{
switch(type)
{
case 1: handleType1(); break;
case 2: handleType2(); break;
default: throw new IllegalArgumentException(); break;
}
}
private void handleType1(){}
private void handleType2(){}
}
タイプ3とタイプ4のサポートを追加する必要があります。ただし、ClassAのコードは変更できません。
私はClassAを拡張し、以下のようにタイプ3とタイプ4のサポートを追加するClassBを書くと思った。
Class ClassB extends ClassA{
ClassB(int type)
{
case 3: handleType3(); break;
case 4: handleType4(); break;
default:
{
try{
/* To support type 1 and type 2. */
super(type);
} catch(IllegalArgumentException e) {
/* Handle exception. */
}
} break;
}
private void handleType3(){}
private void handleType4(){}
}
これはうまくいくと思いました。しかし、私は "を取得しました。ClassBのコンストラクタでsuper()はコンストラクタ本体の最初のステートメントでなければなりません" "エラーが発生しました。
私はthis postを読んでいます。なぜスーパー()がコンストラクタの最初のステートメントでなければならないのか理解しています。
ClassBのClassAの完全なコードを記述し、タイプ3と4のサポートを追加することで、私の使用例に対処できます。しかし、この問題の解決策があるかどうかを知りたいと思います。
のための共通のメソッドを宣言するインタフェースの実装があるはずですそれはそのような疑問になると... – xenteros