Findbugs отмечает, что падение от одного case
к следующему обычно не является хорошей идеей, если в первом есть какой-либо код (хотя иногда его можно использовать для хорошего эффекта). Поэтому, когда он видит второй case
и не break
, он сообщает об ошибке.
Так, например:
switch (foo) {
case 0:
doSomething();
case 1:
doSomethingElse();
default:
doSomeOtherThing();
}
Это вполне допустимо Java, но это, вероятно, не делать то, что задумал автор: Если foo
является 0
, все три функции doSomething
, doSomethingElse
, и doSomeOtherThing
запустить (в указанном порядке). Если foo
- 1
, только doSomethingElse
и doSomeOtherThing
пробег. Если foo
- любое другое значение, выполняется только doSomeOtherThing
.
В отличие:
switch (foo) {
case 0:
doSomething();
break;
case 1:
doSomethingElse();
break;
default:
doSomeOtherThing();
break;
}
Здесь только одна из функций будет работать, в зависимости от значения foo
.
Поскольку это общая ошибка кодирования, чтобы забыть break
, такие инструменты, как Findbugs, помечены для вас.
Там в общее пользование, случай, когда у вас есть несколько case
заявления в ряд с не промежуточный код:
switch (foo) {
case 0:
case 1:
doSomething();
break;
case 2:
doSomethingElse();
break;
default:
doSomeOtherThing();
break;
}
Там, мы хотим вызвать doSomething
если foo
является 0
или1
. Большинство инструментов не будут отмечать это как возможную ошибку кодирования, потому что код case 0
отсутствует до case 1
, и это довольно распространенный шаблон.
что сообщение об ошибке сказать? –
И проблема в том, что ...? – fge
Вы уверены, что это не предупреждение, а ошибка? – xagyg