首页 > 解决方案 > Java:声纳强制构造函数

问题描述

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

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

private Engine engine = null;

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

标签: javasonarqubecode-analysisstatic-code-analysis

解决方案


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

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


推荐阅读