2

我在我的 Java 项目中使用 PMD 插件。

当我运行 PMD 时,它会将警告显示为“Document Empty Constructor”。

我的代码如下...

public class ExceptionHandlerImpl implements ExceptionHandler {

    private static final Logger log = Logger
            .getLogger(ExceptionHandlerImpl.class);

    /**
     * Default Constructor
     */
    public ExceptionHandlerImpl()
    {
        super();
    }

在上面的构造函数代码中,它显示“文档空构造函数”。

我该如何解决这个问题以及为什么会发生这种情况?

4

3 回答 3

5

在您的情况下,触发了UncommentedEmptyConstructor规则。

它会找到非私有构造函数不包含任何语句或仅包含super()且内部没有注释的地方。之前的 Javadoc 与此规则无关。

通过在空构造函数中提供注释,更容易区分有意的(例如,能够提供 Javadoc)和无意的空构造函数(有人忘记编写实现,或者这个构造函数可以被删除)。

这条规则对你的期望是这样的:

class MyConstructorIsNeededHere { 
  /** 
   * Creates instance of {@link Foo}.
   */ 
  MyConstructorIsNeededHere() { 
    // The explicit constructor is here, so that it is possible to provide Javadoc. 
  } 
} 

并在以下情况下警告您:

class OhNoICanBeRemoved { 
  OhNoICanBeRemoved() { 
    super();
  } 
} 
于 2015-10-16T15:45:36.697 回答
1

您会收到警告,因为您编写的构造函数与 Java 将创建的隐式默认构造函数本质上相同。因此,您可以删除您的构造函数。但是,如果有任何特殊原因仍要保留它,则应在评论中记录原因。这就是 PMD 告诉你的。

于 2015-10-16T11:53:50.653 回答
0

在实践中,将“默认构造函数”写为评论消息就足够了

class Util { 

  Util() { 
    // Default constructor
  } 
} 
于 2017-02-17T10:06:37.967 回答