Findbugs फ़्लैगिंग कर रहा है कि अगले में एक case
से गिरने पर आम तौर पर कोई अच्छा विचार नहीं है (हालांकि कभी-कभी इसे अच्छे प्रभाव के लिए उपयोग किया जा सकता है)। तो जब यह दूसरे case
और break
नहीं देखता है, तो यह त्रुटि की रिपोर्ट करता है।
उदाहरण के लिए
तो:
switch (foo) {
case 0:
doSomething();
case 1:
doSomethingElse();
default:
doSomeOtherThing();
}
यह पूरी तरह से वैध जावा है, लेकिन यह शायद क्या लेखक का इरादा नहीं करता है: यदि 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 यह झंडा ऊपर आप के लिए जैसे उपकरण।
switch (foo) {
case 0:
case 1:
doSomething();
break;
case 2:
doSomethingElse();
break;
default:
doSomeOtherThing();
break;
}
वहाँ, हम कॉल करने के लिए doSomething
अगर foo
0
या1
है चाहता हूँ:
एक आम यूज-केस जहां कोई कोड हस्तक्षेप के साथ लगातार एक से अधिक case
बयान है नहीं है। अधिकांश टूल इसे संभावित कोडिंग त्रुटि के रूप में फ़्लैग नहीं करेंगे, क्योंकि case 1
से पहले case 0
में कोई कोड नहीं है और यह एक काफी आम पैटर्न है।
स्रोत
2011-12-19 16:05:32
त्रुटि संदेश क्या कहता है? –
और समस्या है ...? – fge
क्या आप वाकई एक त्रुटि के बजाय चेतावनी नहीं हैं? – xagyg