2016-01-20 2 views
5

У меня есть следующий метод Java: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). Или вы можете добавить предупреждение для PMD для этого метода. – 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

FYI: Это было исправлено с PMD 5.3.5 ([ошибка # 1407] (https://sourceforge.net/p/pmd/bugs/1407)). Таким образом - обновление PMD должно избавиться от этого ложного нарушения. – 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

Смежные вопросы