当前位置: 首页 > 面试题库 >

PMD规则背后的“为什么”

慕震博
2023-03-14
问题内容

是否有很好的资源来描述PMD规则集背后的“为什么”?PMD的站点具有“什么”(每条规则的作用),但是并未说明PMD为何具有该规则以及为何忽略该规则会使您在现实世界中遇到麻烦。特别是,我很想知道PMD为何具有避免规则In避免(InstantInstantiatingObjectsInLoops和OnlyOneReturn)(如果需要创建一个与集合中每个对象相对应的新对象,则第一个似乎是必要的,第二个似乎在许多情况下是必需的)返回基于某些条件的值),但我真正想要的是某个链接,该链接描述了大多数PMD规则背后的“为什么”,因为这种情况经常出现。

明确地说,我知道我可以禁用它们以及如何做到这一点,我只是想知道为什么它们首先存在。抱歉,如果有明显的东西我错过了,但是在发布之前我先进行了Google搜索和SO搜索。我还理解,这些问题通常是“口味”问题-
我正在寻找的是规则的论据以及存在哪些替代方案。举一个具体的例子,您如何在不实例化循环中的每个对象的情况下实现与循环中的每个对象相对应的一个对象(这在Java中是常见的操作)?


问题答案:

在每种情况下,规则都可以是特定情况的问题,也可以只是“味道”。

如果存在大量的迭代并且实例化非常昂贵,则应避免在循环中实例化对象。如果可以将代码移出循环,则可以避免许多对象实例化,从而提高性能。话虽如此,这并不总是可能的,在某些情况下,这与代码的整体性能无关紧要。在这些情况下,请执行更清晰的操作。

对于OnlyOneReturn,有几种查看此方法的方法(每种方法后面都有强烈的支持者),但基本上都可以归结为一种口味。

对于您的示例,OnlyOneReturn支持者需要以下代码:

public int performAction(String input) {
    int result;
    if (input.equals("bob")) {
        result = 1;
    } else {
        result = 2;
    }
    return result;
}

而不是:

public int performAction(String input) {
    if (input.equals("bob")) {
        return 1;
    } else {
        return 2;
    }
}

如您所见,ReturnOnlyOnce的其他清晰度尚有争议。



 类似资料:
  • 问题内容: DataflowAnomalyAnalysis:找到变量“ variable”(行“ n1”-“ n2”)的“ DD”异常。 DataflowAnomalyAnalysis:找到变量“ variable”(行“ n1”-“ n2”)的“ DU”异常。 DD和DU听起来很熟悉…我想在涉及最差的前后条件的测试和分析中说些什么,但我不记得具体情况。 NullAssignment:将Objec

  • 我已经安装了SonarQube 4.3.3版,但当我导航到质量配置文件时- 我只能看到常见的Sonar、FindBugs和Sonar Qube规则库 这是否意味着我的声纳没有检查PMD规则?

  • 我正在尝试创建一个自定义规则,用于标记void方法中return语句的使用,例如: 我用以下XPath创建了一个自定义XPath规则: 但是当我将此规则导入Eclipse并对代码运行PMD时,它并没有标记我期望的方法,即与上述描述匹配的方法(包含返回的无效方法)。 有人知道这里有什么问题吗?我的XPath有问题吗?或者可能是别的原因? 我使用v3.2.6的插件,其中包含pmd14-4.2.5.ja

  • 有人能详细解释一下这条规则吗。规则:AccessorMethodGeneration优先级:3避免自动生成的方法访问私有字段和内部/外部类的方法,并提供字段和方法的具体示例?

  • 我们在Java项目中使用源代码分析器PMD。我正在努力解决报告中的问题,目前正在努力解决规则。我知道这个想法不是为了创建大型类。 然而,我不喜欢“巨大”这个词,因为它太模糊了。有人能解释一下这条规则是如何运作的吗?报告说。 可能的上帝类(WMC=47,ATFD=11,TCC=0.06315789473684211) 这些数字意味着什么?有人知道决定某个特定类是否庞大的公式吗? 这个规则的Javad