Java:声纳强制构造函数

Gan*_*ute 2 java code-analysis static-code-analysis sonarqube

我们使用声纳进行代码分析。对于这样的课程

public class Car {
  private Engine engine; 

  // getter setter for engine
}
Run Code Online (Sandbox Code Playgroud)

我们收到错误,例如

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 序列化我们的对象,因此构造函数不会在我们的代码中的任何地方使用。那么为什么我还需要编写构造函数呢?禁用此规则是否有意义? 规则链接

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

private Engine engine = null;
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*235 5

对于应该如何避免缺陷,Sonar 有非常固执己见的想法。在这里,他们的意见是您应该明确初始化实例字段。我认为他们的想法是添加“= null”表明您打算将该字段设置为 null 并且这不是一个疏忽。

在许多开发人员共享的代码中添加许多 //NOSONAR 是一种糟糕的做法,因为这样做很快就会成为一种惯例,并且违背了使用 Sonar 的目的。我建议简单地提交到声纳并添加初始化。要么这样做,要么关闭规则。