Java: Сонар, обязательный конструктор - PullRequest
0 голосов
/ 04 мая 2018

Мы используем 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.

Мы обычно сериализуем наши объекты с Джексоном, поэтому конструктор не используется нигде в нашем коде. Так почему же мне все еще нужно написать конструктор? Имеет ли смысл отключить это правило? Ссылка на правило

Другое дело, если я изменю код, как показано ниже

private Engine engine = null;

Ошибка не выдается. По умолчанию все ссылки на Java присваиваются с нулевым значением. Эта линия обманывает сонар? Это ошибка в сонаре?

1 Ответ

0 голосов
/ 04 мая 2018

Сонар имеет очень самоуверенные идеи о том, что нужно делать, чтобы избежать дефектов Здесь, по их мнению, вы должны четко указывать на инициализацию полей экземпляра. Я предполагаю, что они думают, что добавление «= null» показывает, что вы хотели установить для поля значение null и что это не недосмотр.

Добавление многих // NOSONAR в код, используемый многими разработчиками, является плохой практикой, так как это вскоре становится соглашением и противоречит цели использования Sonar. Я предлагаю просто отправить в Sonar и добавить инициализацию. Либо так, либо отключи правило.

...