Java:声纳强制构造函数

时间:2018-05-04 18:36:31

标签: java sonarqube code-analysis static-code-analysis

我们正在使用Sonar进行代码分析。对于类似这样的课程

public class Car {
  private Engine engine; 

  // getter setter for engine
}

我们收到错误,例如

Non-abstract classes and enums with non-static, private members should explicitly initialize those members, either in a constructor or with a default value.

我们通常使用Jackson序列化我们的对象,因此构造函数不会在我们的代码中的任何地方使用。那么为什么我还需要编写一个构造函数呢?禁用此规则是否有意义? Rule Link

另一件事,如果我改变代码如下

private Engine engine = null;

不会抛出错误。默认情况下,所有Java引用都分配有空值。这条线是否愚弄了声纳?这应该是Sonar中的一个错误吗?

1 个答案:

答案 0 :(得分:2)

声纳对于你应该采取什么措施以避免缺陷有很自然的看法。在这里,他们认为你应该明确初始化实例字段。我假设他们的想法是添加“= null”表示您打算将该字段设置为null并且它不是一个疏忽。

在许多开发人员共享的代码中添加许多// NOSONAR是一种不好的做法,因为这样做很快就会成为一种约定并且会破坏使用Sonar的目的。我建议只需提交Sonar并添加初始化。要么是,要么关掉规则。