Несколько значений в случае переключения / преобразование ifs в инструкцию switch - PullRequest
2 голосов
/ 02 декабря 2011

У меня есть большой список Ifs, и я хочу изменить его на оператор switch.В настоящее время это выглядит так:

if(x == 1){
    ...
}
if(x == 2){
    ...
}
if(myArray.contains(x)){
    ...
}

На самом деле это немного дольше, чем это, но это третий случай, если в примере меня смущает - как мне это изменить, чтобы заставить его работать в коммутатореили это вообще возможно?

Ответы [ 5 ]

17 голосов
/ 02 декабря 2011

Вы можете сделать что-то подобное, но YMMV в соответствии с возможными условиями выхода в вашем коде:

switch (x) {
case 1: 
  ...
  break;
case 2:
  ...
  break;
case 3:
case 4:
  ... multi-case
  break;
default:
  if(myArray.contains(x)){
    ...
  }
}
3 голосов
/ 02 декабря 2011

Оператор Switch может использоваться только для проверки равенства x

Таким образом, если not equality conditions like (if(myArray.contains(x))) должно заканчиваться, вы можете скопировать его и вставить в секцию по умолчанию переключателя

Это будет выглядеть так

    switch (x) {
     case 1:   ...; break;
     case 2:   ...; break;
     default: if(myArray.contains(x)) ...
    }

Если not equality conditions должен быть посередине, тогда использование переключателя невозможно.

ссылка: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

1 голос
/ 02 декабря 2011

Да, это возможно.Оператор switch сделает его немного чище и проще в обслуживании.Вам нужно беспокоиться о x, потому что он должен быть постоянным во время компиляции.

switch(x) {
 case 1:
    doSomething();
    break();
 case 2:
    doSomethingElse();
    break();

default:
 if(myArray.contains(x)){

 }


//etc...
}
1 голос
/ 02 декабря 2011

Вы можете переключаться только на значение х.Это означает, что последнее условие не будет частью переключателя:

switch(x) {
case 1:
    ...
    break;
case 2:
    ...
    break;
}
if(myArray.contains(x)){
    ...
}
0 голосов
/ 02 декабря 2011

Это не выглядит объектно-ориентированным.

Попробуйте изменить код с помощью «Заменить условное полиморфизмом» http://martinfowler.com/refactoring/catalog/replaceConditionalWithPolymorphism.html

Карта может помочь вам сделать некоторые поиски, если вам нужно преобразовать из int в пользовательский объект.

...