【问题标题】:PMD "Found 'DD'-anomaly" vs "only one return statement"PMD“发现'DD'-异常”与“只有一个返回声明”
【发布时间】:2016-10-03 23:29:41
【问题描述】:

我尝试删除项目中的所有 PMD 警告,但遇到了一些困难。我有一个返回 Container 对象的方法。这是我原来的方法(简化):

try {
    return setResult();
} catch (Exception ex) {

}
return null;

PMD 警告说有 2 个返回语句。所以我尝试了这个:

Container result = null;
try {
    result = setResult();
} catch (Exception ex) {

}
return result;

=> PMD 警告使用 null 进行初始化。所以我尝试了这个:

Container result;
try {
    result = setResult();
} catch (Exception ex) {

}
return result;

=> Eclipse 没有编译这个,建议使用“= null”变体。

我在这里缺少什么?如何在没有 PMD 警告的情况下编写此方法?

【问题讨论】:

    标签: java pmd


    【解决方案1】:

    我会使用你展示的第二种方法:

    Container result = null;
    try {
        result = setResult();
    } catch (Exception ex) {
    
    }
    return result;
    

    因为正如 PMD 指出的那样,为了降低复杂性,避免不必要的返回语句很重要。

    PMD 文档对NullAssignment rule as "controversial" 进行了分类。它的用处很大程度上取决于上下文。这是他们提供的示例代码:

    public void bar() {
      Object x = null; // this is OK
      x = new Object();
       // big, complex piece of code here
      x = null; // this is not required
       // big, complex piece of code here
    }
    

    因此,除非您可以事先为 Container 变量分配一个有意义的值 - 您可能应该忽略此代码片段的这条规则。

    如果你想完全避免空赋值,你可以使用Guava's Optional。在这种情况下,它具有以下优点:

    1. 它迫使您考虑缺少值
    2. 让代码更易理解
    3. 它让 PMD 开心

    【讨论】:

      猜你喜欢
      • 2016-06-14
      • 1970-01-01
      • 2012-12-29
      • 2022-07-07
      • 1970-01-01
      • 2018-05-15
      • 2013-07-06
      • 2012-01-11
      • 1970-01-01
      相关资源
      最近更新 更多