2

我尝试删除项目中的所有 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 警告的情况下编写此方法?

4

1 回答 1

1

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

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

}
return result;

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

PMD 文档将NullAssignment 规则归类为“有争议的”。它的用处很大程度上取决于上下文。这是他们提供的示例代码:

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 的 Optional。在这种情况下,它具有以下优点:

  1. 它迫使您考虑缺少价值
  2. 它使代码更易于理解
  3. 它使PMD高兴
于 2013-10-11T06:38:00.153 回答