У меня есть класс 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.
Поэтому я думал, что напишу ClassB, который расширяет ClassA и добавляет поддержку для type3 и type 4, как показано ниже.
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(){}
}
Я думал, что это сработает. Но я получил «». Вызов super() должен быть первым выражением в корпусе конструктора «Ошибка в конструкторе ClassB.
Я читал this post, и я понимаю, почему super() должен быть первым выражением в конструкторе.
Я могу обратиться к своему прецеденту, написав полный код ClassA в ClassB и добавив поддержку типов 3 и 4. Но я хочу знать, есть ли какие-либо более эффективные решения этой проблемы.
Я думаю, что есть проблема с приложением архитектуры когда дело доходит до таких сомнений ... – xenteros