Findbugs đang gắn cờ mà rơi từ một case
sang tiếp theo thường không phải là ý tưởng hay nếu có bất kỳ mã nào trong mã đầu tiên (mặc dù đôi khi nó có thể được sử dụng để có hiệu quả tốt). Vì vậy, khi nó thấy số case
thứ hai và không có break
, báo cáo sẽ báo lỗi.
Vì vậy, ví dụ:
switch (foo) {
case 0:
doSomething();
case 1:
doSomethingElse();
default:
doSomeOtherThing();
}
này là hoàn toàn hợp lệ Java, nhưng nó có lẽ không làm những gì tác giả dự định: Nếu foo
là 0
, cả ba các chức năng doSomething
, doSomethingElse
, và doSomeOtherThing
chạy (theo thứ tự đó). Nếu foo
là 1
, chỉ doSomethingElse
và doSomeOtherThing
chạy. Nếu foo
là bất kỳ giá trị nào khác, chỉ doSomeOtherThing
chạy.
Ngược lại:
switch (foo) {
case 0:
doSomething();
break;
case 1:
doSomethingElse();
break;
default:
doSomeOtherThing();
break;
}
Ở đây, chỉ có một số chức năng sẽ chạy, tùy thuộc vào giá trị của foo
.
Vì đây là lỗi mã hóa phổ biến để quên break
, các công cụ như Findbugs gắn cờ cho bạn.
Có một use-case thông thường, nơi bạn có nhiều case
báo cáo trong một hàng với không can thiệp mã:
switch (foo) {
case 0:
case 1:
doSomething();
break;
case 2:
doSomethingElse();
break;
default:
doSomeOtherThing();
break;
}
Ở đó, chúng tôi muốn gọi doSomething
nếu foo
là 0
hay1
. Hầu hết các công cụ sẽ không gắn cờ điều này như là một lỗi mã hóa có thể xảy ra, bởi vì không có mã nào trong số case 0
trước case 1
và đây là một mẫu khá phổ biến.
Nguồn
2011-12-19 16:05:32
thông báo lỗi nói gì? –
Và vấn đề là ...? – fge
Bạn có chắc chắn đó không phải là cảnh báo thay vì lỗi không? – xagyg