Мы используем 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 присваивается нулевое значение. Эта линия обманывает Сонар? Это должно быть ошибкой в Sonar?
Это проблема исходного сигнала разработчика: «Это то, что я намереваюсь» (т.е. null) против «Я забыл или не позаботился установить начальное значение».
Если класс Только используется Джексоном / другой библиотекой посредством отражения, то вы можете добавить //NOSONAR или использовать механизм аннотации @SuppressWarnings для кода нарушения с комментарием, в котором упоминается Зачем, вы игнорируете правило. Это покажет другим, что переменные экземпляра не инициализированы явно по дизайну.
Отключение правила немного опасно, потому что другие файлы с проблемой (подлинные) также могут быть проигнорированы. Вместо этого используйте NOSONAR или исключите класс / пакет. Вы также можете отметить нарушения как ложно положительный.
@jonrsharpe @Jim Garrison Вы правы, явное присвоение нулевых значений имеет смысл. @Mick Mnemonic //NOSONR или @SuppressWarnings не имеет смысла. Он также проигнорирует другие ошибки. @Vasan, верно, отключение правила опасно.




У Sonar очень категоричные представления о том, что вам следует делать, чтобы избежать дефектов. Здесь, по их мнению, вы должны четко указывать на инициализацию полей экземпляра. Я предполагаю, что они думают, что добавление «= null» показывает, что вы хотели установить для поля значение null, и что это не является недосмотром.
Добавление большого количества // NOSONAR в код, совместно используемый многими разработчиками, является плохой практикой, поскольку вскоре это становится условностью и сводит на нет цель использования Sonar. Я предлагаю просто отправить в Sonar и добавить инициализацию. Либо так, либо отключи правило.
Обратите внимание, что он рекомендует "явно инициализировать", поэтому неявная инициализация нулевым значением не будет учитываться.