2010-07-13 6 views
9

में स्ट्रिंग तुलना के लिए किया जाता है क्या कोई तरीका है कि मैं स्ट्रिंग समानता का परीक्षण करने के लिए == ऑपरेटर के उपयोग को हाइलाइट करने के लिए ग्रहण प्राप्त कर सकता हूं? मैं .equals() पर कॉल करने के बजाय गलती से इसका उपयोग करता रहता हूं।हाइलाइट करें जब समानता ऑपरेटर (==) का उपयोग ग्रहण

मैं वास्तव में इसे चेतावनी में बनाना चाहता हूं और इसे हटाने के लिए @SuppressWarnings एनोटेशन की आवश्यकता है, अभी तक होने वाले मामले में मैं वास्तव में ऑब्जेक्ट समानता के लिए स्ट्रिंग की तुलना करना चाहता हूं।

क्या संपादन के समय में इस बुरी आदत को तोड़ने में मदद के लिए मैं कोई उपकरण उपयोग कर सकता हूं?

उत्तर

10

static analysis उपकरण जैसे FindBugs, PMD, या CheckStyle का उपयोग करें।

वहाँ, प्रत्येक के लिए ग्रहण प्लग-इन कर रहे हैं चींटी कार्य, Maven प्लगइन्स के साथ आदि

इनमें से प्रत्येक स्ट्रिंग समानता (Findbugs rule, PMD rule, Checkstyle rule) से संबंधित नियम हैं।

+1

मैं निश्चित रूप से एक्स्प्से के लिए Findbugs का उपयोग करना चाहता हूं .... इन छोटे प्रकार के कोडिंग मुद्दों को पकड़ने के लिए एक देवता रहा है! – mikera

+1

ये सभी महान हैं, खासकर जब एक सतत एकीकरण सर्वर पर हडसन जैसे एक साथ उपयोग किया जाता है (बशर्ते लोग वास्तव में परिणाम देखें :-)) –

+1

क्या आप जानते हैं कि उनमें से कोई संपादन समय पर चलता है? हम पहले से ही इनमें से कुछ को रात के निर्माण के हिस्से के रूप में चला रहे हैं, और रिपोर्ट फाइलें उत्पन्न कर रहे हैं। मुझे ऐसा कुछ चाहिए जो त्रुटि के रूप में सही/चेतावनी को हाइलाइट करता है। –

5

प्रश्न has already been given पर स्पष्ट उत्तर, लेकिन यहां एक चेतावनी है जो प्रत्यक्ष उत्तर नहीं है: obj.equals ओबीजे शून्य होने पर भी असफल हो सकता है। इसलिए आप अक्सर इस तरह कोड का उपयोग करना होगा:

if(mystr1 != null && mystr1.equals(mystr2)) 

क्योंकि इस

if(mystr1.equals(mystr2)) 

एक NullPointerException साथ विफल हो जाएगा यदि mystr1 रिक्त है।

यही वजह है कि तुलना स्ट्रिंग एक ज्ञात स्थिर, निम्न सिंटैक्स का अक्सर इस्तेमाल किया जाता है जब:

if("ABCDEF".equals(mystr1)) 

बजाय

if(mystr1.equals("ABCDEF")) 

इस कारण से, कई पुस्तकालयों (जैसे apache commons/lang) उपयोगिता कार्यों को प्रदान करें जो इन चेकों को गठबंधन करते हैं:

// this is the definition of org.apache.commons.lang.StringUtils.equals(String, String) 
public static boolean equals(String str1, String str2) { 
    return str1 == null ? str2 == null : str1.equals(str2); 
} 

// this is the definition of org.apache.commons.lang.ObjectUtils.equals(Object, Object) 
public static boolean equals(Object object1, Object object2) { 
    if (object1 == object2) { 
     return true; 
    } 
    if ((object1 == null) || (object2 == null)) { 
     return false; 
    } 
    return object1.equals(object2); 
} 

इन विधियों का उपयोग आमतौर पर सादे बराबर से सुरक्षित है, जब तक कि आप यह सुनिश्चित न करें कि दो ऑब्जेक्ट्स में से कोई एक शून्य नहीं है

1

मैं पिछले उत्तरों से असहमत हूं - यह ग्रहण में एक बग है और आप इसके लिए यहां वोट दे सकते हैं: https://bugs.eclipse.org/bugs/show_bug.cgi?id=39095

ग्रहण बहुत अच्छी तरह से आपको चेतावनी देता है जब आप == साथ स्ट्रिंग्स की तुलना के रूप में इस शायद ही कभी होता है जैसे आप चाहते हैं (या क्या मूल लेखक चाहता था) कर सकते हैं।

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

  • कोई संबंधित समस्या नहीं^_^