switch
문을 사용하고 싶지만 코드를 복제하거나 동봉 된 if
문을 사용하지 않고 구성 할 수는 없습니다. 이 문제를 해결할 방법이 있습니까?switch 문에 코드 재사용 (Java)
나는 5 가지 경우가 있으며 그 중 하나만 제외하고 나는 어떤 행동을하고 싶다. 따라서 switch
성명서를 사용하면 할 수 있습니다.
switch(x) {
case A:
foo();
break;
case B:
case C:
case D:
case E:
bar();
break;
}
쉬운. 그러나 어려움은 또한 각자 다른 뚜렷한 행동을 수행해야하기 때문에 나는 그 사건의 뚜렷한 특징을 사용할 수 없다. 그래서 코드를 복제하지 않습니다 중 하나
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(); }
로 감소하고있어,하지만 날 귀찮게 거기 I
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()'가 아니라 그냥 지정 문이라고 할 수있다. –