PMD UselessParentheses违规

时间:2016-01-20 21:46:26

标签: java pmd

我有以下Java方法:

<%= link_to 'My Profile', user_path(current_user.id) %>

PMD对此代码抱怨“UselessParentheses”违规行为。

我已经审核了operator precentence rules,但我仍然没有在该代码中看到多余的括号。我错过了什么吗?

2 个答案:

答案 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