我有以下的Java方法:PMD UselessParentheses違反
private int calculate() {
return (bytes[0] & 0xff) + ((bytes[1] & 0xff) << 8);
}
PMD對這個代碼抱怨與 「UselessParentheses」 違規。
我評論了operator precentence rules,但我仍然沒有在該代碼中看到多餘的括號。我錯過了什麼嗎?
我有以下的Java方法:PMD UselessParentheses違反
private int calculate() {
return (bytes[0] & 0xff) + ((bytes[1] & 0xff) << 8);
}
PMD對這個代碼抱怨與 「UselessParentheses」 違規。
我評論了operator precentence rules,但我仍然沒有在該代碼中看到多餘的括號。我錯過了什麼嗎?
有這個代碼沒有不必要的括號,你可以看到,如果你運行:
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
僅供參考:已通過PMD 5.3.5修正([bug#1407](https://sourceforge.net/p/pmd/bugs/1407))。所以 - 更新PMD應該擺脫這種錯誤的違規行爲。 – adangel
仔細閱讀操作偏好,代碼行和PMD的警告後,這可能是一個罕見的情況下,優先級是指像
PMD complains on this code with a useless (parenthesis warning)
而不是
PMD complains on this code with a (useless parenthesis) warning.
施加一個
你的代碼是正確的,括號不是多餘的。刪除它們會使代碼不易讀,並且每個代碼都是需要的。事實上,這整個問題是值得的xkcd comic
在該塊中刪除括號:(字節[0]&0xff的) – eg04lt3r
重要的是,即使有一個多餘的對括號(我看不到任何),代碼將遠遠小於沒有它可讀。這是寫的方式確切地表達了你的邏輯意味着要做的事情。 – biziclop
對不起,我的錯誤是刪除(bytes [0]&0xff)中的括號。或者,您可以將PMD的壓制警告添加到此方法。 – eg04lt3r