Почему SonarQube обнаруживает эту проблему (<static initializer for> () использует конструктор побочных эффектов) с файлами case и object class? - PullRequest
1 голос
/ 02 июля 2019

При запуске сканирования SonarQube все файлы scala case class и object помечаются странной проблемой: Method com.org.package.ExampleCaseClass$.<static initializer for >() uses a Side Effect Constructor

Если я преобразую его в обычный класс, проблема исчезнет, ​​как ни странно. Чем отличаются классы / объекты case?

Декомпиляция 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)

Сонар расширяет тему, говоря:

  • Этот метод создает объект, но не назначает этот объект какой-либо переменной или полю. Это подразумевает, что класс работает через побочные эффекты в конструкторе, что является плохим шаблоном для использования, так как добавляет ненужную связь. Попробуйте извлечь побочный эффект из конструктора, в отдельный метод или в вызывающий метод.

Однако, учитывая, что этот класс просто принимает строки в конструкторе, я не уверен, каким может быть побочный эффект. Это ложное срабатывание?

1 Ответ

0 голосов
/ 10 июля 2019

В конце концов было решено отметить проблему сонара как ложное срабатывание и двигаться дальше о нашей жизни.

...