2016-01-20 11 views
5

मैं निम्नलिखित जावा विधि है:PMD UselessParentheses उल्लंघन

private int calculate() { 
    return (bytes[0] & 0xff) + ((bytes[1] & 0xff) << 8); 
} 

PMD "UselessParentheses" उल्लंघन के साथ इस कोड पर शिकायत।

मैंने operator precentence rules की समीक्षा की है और मुझे अभी भी उस कोड में अनावश्यक ब्रांड्स दिखाई नहीं दे रहा है। क्या मैं कुछ भूल रहा हूँ?

+0

इस ब्लॉक में कोष्ठक निकालें:: (बाइट्स [0] और 0xff) – eg04lt3r

+10

महत्वपूर्ण बात है, भले ही वहाँ कोष्ठक की एक ज़रूरत से ज़्यादा जोड़ी (मैं किसी भी नहीं देख सकता था), कोड अब तक कम हो सकता है उदाहरण के लिए इसके बिना पठनीय। जिस तरह से यह लिखा गया है, वही बताता है कि आपका तर्क क्या है। – biziclop

+0

क्षमा करें, मेरी गलती, (बाइट्स [0] और 0xff में कोष्ठक हटाएं)। या आप पीएमडी के लिए इस विधि में दबाने की चेतावनी जोड़ सकते हैं। – eg04lt3r

उत्तर

5

के योग्य है इस कोड में कोई अनावश्यक कोष्ठक है, जैसा कि आप अगर आप इस चलाने के देख सकते हैं:

 byte [] bytes = new byte[] {1,2}; 

     System.out.println((bytes[0] & 0xff) + ((bytes[1] & 0xff) << 8)); 
     System.out.println(bytes[0] & 0xff + ((bytes[1] & 0xff) << 8)); 
     System.out.println((bytes[0] & 0xff) + (bytes[1] & 0xff) << 8); 
     System.out.println((bytes[0] & 0xff) + (bytes[1] & 0xff << 8)); 

इसके अलावा, कभी कभी यह करने के लिए अतिरिक्त कोष्ठक जोड़ने के लिए वास्तव में अच्छा है पठनीयता।

int i = x << y + z; // this will shift x by y+z bits 
int j = x << (y + z); // equivalent, but more readable 
+1

एफवाईआई: यह पीएमडी 5.3.5 ([बग # 1407] (https://sourceforge.net/p/pmd/bugs/1407) के साथ तय किया गया है)। तो - पीएमडी को अद्यतन करने से इस झूठे उल्लंघन से छुटकारा पाना चाहिए। – adangel

3

ऑपरेटर वरीयताओं, कोड की पंक्ति है, और PMD चेतावनी पढ़ने के बाद, यह शायद उन दुर्लभ मामलों में जहां पूर्वता

PMD complains on this code with a useless (parenthesis warning) 
बजाय

PMD complains on this code with a (useless parenthesis) warning. 
तरह लागू किया जा करने के लिए है में से एक है

आप कोड सही हैं, और कोष्ठक अनिवार्य नहीं हैं। उन्हें हटाने से कोड कम पठनीय हो जाएगा, और उनमें से प्रत्येक की आवश्यकता है। वास्तव में, इस पूरे मुद्दे एक xkcd comic

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