PMD UselessParentheses 违规
PMD UselessParentheses violation
我有以下Java方法:
private int calculate() {
return (bytes[0] & 0xff) + ((bytes[1] & 0xff) << 8);
}
PMD 投诉此代码 "UselessParentheses" 违规。
我已经查看了 operator precentence rules,但我仍然没有在该代码中看到多余的括号。我错过了什么吗?
在阅读了操作员首选项、代码行和 PMD 警告之后,这可能是像
这样应用优先级的罕见情况之一
PMD complains on this code with a useless (parenthesis warning)
而不是
PMD complains on this code with a (useless parenthesis) warning.
你的代码是正确的,括号也不是多余的。删除它们会使代码的可读性降低,并且它们中的每一个都是必需的。事实上,这整个问题都值得 xkcd comic
此代码中没有不必要的括号,如您所见运行 this:
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
我有以下Java方法:
private int calculate() {
return (bytes[0] & 0xff) + ((bytes[1] & 0xff) << 8);
}
PMD 投诉此代码 "UselessParentheses" 违规。
我已经查看了 operator precentence rules,但我仍然没有在该代码中看到多余的括号。我错过了什么吗?
在阅读了操作员首选项、代码行和 PMD 警告之后,这可能是像
这样应用优先级的罕见情况之一PMD complains on this code with a useless (parenthesis warning)
而不是
PMD complains on this code with a (useless parenthesis) warning.
你的代码是正确的,括号也不是多余的。删除它们会使代码的可读性降低,并且它们中的每一个都是必需的。事实上,这整个问题都值得 xkcd comic
此代码中没有不必要的括号,如您所见运行 this:
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