При запуске сканирования 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)
Сонар расширяет тему, говоря:
- Этот метод создает объект, но не назначает этот объект какой-либо переменной или полю. Это подразумевает, что класс работает через побочные эффекты в конструкторе, что является плохим шаблоном для использования, так как добавляет ненужную связь. Попробуйте извлечь побочный эффект из конструктора, в отдельный метод или в вызывающий метод.
Однако, учитывая, что этот класс просто принимает строки в конструкторе, я не уверен, каким может быть побочный эффект. Это ложное срабатывание?