2016-01-20 7 views
5

Mam następujący sposób Java:PMD UselessParentheses naruszenie

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

PMD narzeka na ten kod z naruszeniem "UselessParentheses".

Sprawdziłem operator precentence rules i nadal nie widzę nadmiarowych nawiasów w tym kodzie. Czy czegoś brakuje?

+0

Usuń nawiasach w tym bloku (bajty [0] 0xff) – eg04lt3r

+10

istotne, nawet jeśli było zbędne nawiasach (nie widać żadnych), kod byłby znacznie mniej czytelny bez niego. Sposób, w jaki jest to napisane, przekazuje dokładnie to, co ma robić twoja logika. – biziclop

+0

Niestety, mój błąd, usuń nawiasy w (bajtów [0] i 0xff). Możesz też dodać do tej metody ignorowanie ostrzeżenia dla PMD. – eg04lt3r

Odpowiedz

5

Nie ma niepotrzebnych nawias w tym kodzie, jak widać, jeśli uruchomić ten:

 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)); 

Ponadto, czasami jest to rzeczywiście dobry, aby dodać dodatkowe nawiasy dla czytelność. Np

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

FYI: Zostało to naprawione za pomocą PMD 5.3.5 ([bug # 1407] (https://sourceforge.net/p/pmd/bugs/1407)). Tak więc - aktualizacja PMD powinna pozbyć się tego fałszywego naruszenia. – adangel

3

Po przeczytaniu preferencji operatora, wiersz kodu oraz ostrzeżenie PMD, jest to prawdopodobnie jeden z tych rzadkich przypadkach, gdy pierwszeństwo ma być stosowana jak

PMD complains on this code with a useless (parenthesis warning) 

zamiast

PMD complains on this code with a (useless parenthesis) warning. 

Masz kodeks, a nawias nie jest zbyteczny. Usunięcie ich spowodowałoby, że kod byłby mniej czytelny, a każdy z nich jest potrzebny. W rzeczywistości, ta cała sprawa jest godna xkcd comic

Powiązane problemy