2012-10-09 14 views
9

मैं एक्लिप्स का उपयोग करता हूं, इसलिए मेरे लिए //$FALL-THROUGH$ टिप्पणियों का उपयोग स्विच स्टेटमेंट्स और इसी तरह की सामान्य प्रथा है। लेकिन मेरा सहकर्मी नेटबीन्स का उपयोग करता है और सवाल करता है कि मैं पृथ्वी पर क्या कर रहा था। और इसमें किसी प्रतीक के साथ कुछ भी करने का प्रयास करना जमे हुए मिट्टेंस की एक जोड़ी के साथ दांत खींचने की कोशिश करना है और कोई उपकरण नहीं है ...

//$FALL-THROUGH$ टिप्पणी, डॉलर के संकेत और सभी, एक मानक जावा चीज़ का उपयोग है, या कुछ प्रकार के ग्रहण जादू? अगर मैं नेटबीन्स या किसी अन्य आईडीई में एक ही कोड लोड करता हूं, या इसे स्टैंडअलोन जावा कंपाइलर के माध्यम से चलाता हूं, तो स्विच स्टेटमेंट्स के माध्यम से गिर जाएगी, फिर भी चेतावनी के साथ चिह्नित किया जाएगा, यहां तक ​​कि टिप्पणी के साथ या नहीं? @SupressWarning एनोटेशन का उपयोग करने से परे ऐसा करने का एक मानक तरीका है (जो आपको केवल इसका उपयोग करने के लिए कोड को अव्यवस्थित करता है)?

+0

क्या आप इस टिप्पणी का उदाहरण दे सकते हैं? – RNJ

उत्तर

10

इस तरह की चीजें आईडीई/शैली-जांच-उपकरण निर्भर हैं। कोई "मानक जावा टिप्पणियां" नहीं हैं।

(ठीक है, Javadocs मानक हैं, लेकिन वे नियंत्रण नहीं संकलन/त्रुटि रिपोर्टिंग।)

$FALL-THROUGH$ निर्माण की एक व्याख्या ग्रहण release documentation में बताया गया है:

संकलक समस्या स्विच केस स्टेटमेंट में अनुमानित गिरावट के लिए अब निम्नलिखित केस स्टेटमेंट से पहले एक टिप्पणी के साथ दबाया जा सकता है जो $ FALL-THROUGH $ से शुरू होता है। यह कोड के लिए विशेष रूप से दिलचस्प है जो J2SE-5.0-style @SuppressWarnings ("fallthrough") एनोटेशन का उपयोग नहीं कर सकता है।

ध्यान दें कि @Suppresswarnings एनोटेशन के लिए चेतावनी नाम संकलक निर्भर हैं, न कि जावा भाषा मानक।

+0

मुझे लगा कि मैं पूछूंगा। अंतिम जवाब: यह तब ग्रहण जादू है। वाह। : जे – Tustin2121

3

मैंने अन्य टूल्स (जैसे FindBugs) को देखा है जो एक समान टिप्पणी योजना नियुक्त करते हैं। लेकिन कुछ भी मानकीकृत नहीं है।

ज्यादातर मामलों में, इन चेतावनियों को केवल तब फेंक दिया जाता है जब केस स्टेटमेंट में गिरावट से पहले कोड होता है। ज्यादातर मामलों में, आप सामान्य कोड फैक्टरिंग से बच सकते हैं।

उदाहरण के लिए यह सामान्य रूप से एक चेतावनी ट्रिगर किया जाएगा नहीं:

switch (foo) { 
    case 1: 
    case 2: 
    doSomething(); 
    break; 
    ... 
} 

लेकिन यह होगा:

switch (foo) { 
    case 1: 
    doSomething(); 
    case 2: 
    doSomethingElse(); 
    break; 
    ... 
} 

मैं व्यक्तिगत रूप से लगता है कि चेतावनी के एक कारण के लिए कर रहे हैं। मैं इसे अधिक पठनीय (और सुरक्षित) आम कोड बाहर refactor करने के लिए विचार करने और कोई गैर-खाली गिरावट-थ्रू है:

switch (foo) { 
    case 1: 
    doSomething(); 
    doSomethingElse(); 
    break; 

    case 2: 
    doSomethingElse(); 
    break; 
    ... 
} 
+0

मुझे पता है कि गिरावट की चेतावनी का कारण क्या है (असल में मैंने खुद पर चेतावनी चालू की, क्योंकि यह डिफ़ॉल्ट रूप से बंद है)। भले ही, उन लोगों के लिए +1 जो मुझे नहीं पता कि मैं ऊपर क्या बात कर रहा हूं।(इसके अलावा, मैं अपने कोड को अधिक तरीकों से छेड़छाड़ करने की तुलना में गिरावट का उपयोग करना पसंद करता हूं, विशेष रूप से एक जिसे केवल एक विधि में उपयोग किया जाता है।) – Tustin2121

+0

यह स्वाद का विषय है, इसलिए मैं बिल्कुल घोषित नहीं कर सकता कि आप गलत हैं। मैं बस आपको यह सुझाव दूंगा कि कई चीजों में से प्रोग्रामर गलत कर सकते हैं, इसे किसी चेतावनी के लिए चुना गया था। किसी मामले के कथन में कोड के एक हिस्से के बाद 'ब्रेक' की उपस्थिति या अनुपस्थिति जब आप अन्य लोगों के कोड को बनाए रखते हैं तो ग्रोक करना मुश्किल होता है। –

+1

सी # इन तरह की गिरावट की अनुमति भी नहीं है क्योंकि इसमें बग के लिए बड़ी संभावना है (किसी भी प्रकार के बयान से पहले केवल कई मामले) –

2

यह टिप्पणी आईडीई विशिष्ट है और अन्य आईडीई और कोड चेकर्स के साथ विफल हो सकता है, हालांकि FindBugs चालाक है उनमें शब्द गिरावट के साथ टिप्पणियों की जांच करने के लिए पर्याप्त है। लेकिन, किसी भी मामले में आपको सीधे प्रोग्रामर से अधिक करने के लिए टिप्पणियों पर भरोसा नहीं करना चाहिए, आप केवल बनाए रखने के लिए एक और चीज बना रहे हैं।

संबंधित मुद्दे