Я хотел бы использовать оператор switch
, но я не могу его построить без дублирующего кода или с помощью прилагаемого оператора if
. Есть ли способ обойти это?Повторное использование кода в операторе switch (Java)
У меня есть 5 случаев, и для всех, кроме одного из них, я хотел бы выполнить определенное действие. Так с switch
заявление, я просто не могу сделать:
switch(x) {
case A:
foo();
break;
case B:
case C:
case D:
case E:
bar();
break;
}
Easy. Но сложность заключается в том, что мне также необходимо выполнить другое отдельное действие для каждого из них, поэтому я не могу использовать сквозную функцию случаев. Поэтому я сводится либо
switch(x) {
case A:
foo();
baz(0);
break;
case B:
bar();
baz(1);
break;
case C:
bar();
baz(2);
break;
case D:
bar();
baz(3);
break;
case E:
bar();
baz(4);
break;
}
, который воняет мне из-за того, чтобы повторять bar()
каждый раз, или
switch(x) {
case A:
baz(0);
break;
case B:
baz(1);
break;
case C:
baz(2);
break;
case D:
baz(3);
break;
case E:
baz(4);
break;
}
if (x != A) { bar(); }
, не дублировать любой код, но меня беспокоит, что я необходимо использовать как switch
, так и if
.
Я думаю, одна другой альтернативы можно было бы использовать карту, как
Map<X, Integer> m = new HashMap<X, Integer>();
m.put(A, 0);
m.put(B, 1);
m.put(C, 2);
m.put(D, 3);
m.put(E, 4);
if (m.get(x) == 0) {
foo();
} else {
bar();
}
baz(m.get(x));
, но теперь я представил целую структуру данных только очистить это. (И когда вы считаете инициализацию карты, это даже не так уж и больно.)
Любые советы?
И вы не можете/не хотите, чтобы добавить 'если (ARG == 0) бар(), '' в baz'? –
Я полагаю, что могу, но я хотел, чтобы это было более общим ... на самом деле, в коде, который у меня есть, это даже не 'bar()', это просто оператор присваивания. –