我有以下Java方法:
<%= link_to 'My Profile', user_path(current_user.id) %>
PMD对此代码抱怨“UselessParentheses”违规行为。
我已经审核了operator precentence rules,但我仍然没有在该代码中看到多余的括号。我错过了什么吗?
答案 0 :(得分:7)
此代码中没有不必要的括号,因为您可以看到是否运行此代码:
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)
在阅读了操作员首选项,代码行和PMD警告之后,这可能是一种罕见的情况,其中优先级应用于
PMD complains on this code with a useless (parenthesis warning)
而不是
PMD complains on this code with a (useless parenthesis) warning.
你的代码是对的,括号不是多余的。删除它们会降低代码的可读性,并且每个代码都是必需的。事实上,整个问题值得xkcd comic