SonarQube为什么在案例和对象类文件中发现此问题(<(>()的<静态初始化器使用副作用构造器))?

时间:2019-07-02 19:03:22

标签: scala sonarqube sonarqube-scan

运行SonarQube扫描时,所有case classobject的scala文件都标记有奇怪的问题: Method com.org.package.ExampleCaseClass$.<static initializer for >() uses a Side Effect Constructor

如果我将其转换为普通班级,问题就很奇怪了。案例类/对象有什么不同?

将Scala反编译为Java表明确实存在一个静态块:

   public static final ExampleCaseClass$ MODULE$;

   static {
      new ExampleCaseClass$();
   }

具有问题的示例案例类:


case class ExampleCaseClass(var1: String,
                       var2: String,
                       var3: String,
                       var4: String,
                       var5: String,
                       var6: String,
                       var7: String,
                       var8: String)

Sonar扩展了这个问题:

  • 此方法创建一个对象,但不将此对象分配给任何变量或字段。这意味着该类通过构造函数中的副作用进行操作,这是一个不好的模式,因为它增加了不必要的耦合。考虑将副作用从构造函数中拉出,移至单独的方法或调用方法中。

但是,考虑到此类仅在构造函数中使用字符串,我不确定会有什么副作用。这是假阳性吗?

1 个答案:

答案 0 :(得分:0)

最终决定将声纳问题标记为误报,并继续我们的生活。