Сонар с жалобой: «Оператор с бриллиантами (« <> ») должен быть использован» - PullRequest
0 голосов
/ 31 августа 2018

Итак, у меня есть строка кода в моем файле

List<String> nameList = new ArrayList<String>();

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

Вот ссылка с сайта Sonar . Я действительно не понимаю пример, который они приводят с этим правилом.

Есть ли какая-либо производительность, эффективность или любой другой тип усиления в изменить код на то, что предлагает сонар?

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Меньше у вас беспомощного и повторяющегося кода, и чем больше код читается и поддерживается.

List<String> nameList = new ArrayList<String>();

или

List<String> nameList = new ArrayList<>();

Хорошо, не так много различий. Но теперь предположим, что вам нужно изменить универсальный тип: String на Integer, причем первым способом вы должны будете сделать два изменения:

List<Integer> nameList = new ArrayList<Integer>();
      ^------               -------------^

Действительно не приятно.

С бриллиантом требуется один:

List<Integer> nameList = new ArrayList<>();
      ^---             

Но возьмем другой пример:

Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();

или

Map<String, List<Integer>> map = new HashMap<>();

Это проясняет ситуацию.
В приложении вы обычно объявляете и создаете экземпляры множества коллекций и универсальных классов. Рефакторинг это действительно дешево. Так что просто сделай это.

0 голосов
/ 31 августа 2018

Весь смысл этого правила в том, что в Java 7 компилятор получил возможность выводить тип для конструктора из самого типа.

Почему вы должны опустить универсальный тип в конструкторе?

2 вещи:

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

Вредно ли оставлять все как есть? На самом деле, нет. Но всегда лучше иметь согласованный стиль кода в вашей команде. Поэтому, если ваша команда использует гидролокатор для проверки стиля кода, вы должны соответствовать ему для согласованности.

0 голосов
/ 31 августа 2018

есть ли вред, если я сам это сделаю, когда объявляю класс?

Нет, нет никакого вреда в этом, за исключением дополнительной детализации, добавленной в код. Из той же ссылки на правило мы можем прочитать, что

Java 7 представила оператор ромба (<>) , чтобы уменьшить многословие универсальный код


Есть ли какая-либо производительность, эффективность или любой другой тип усиления в изменить код на то, что предлагает сонар?

За исключением того факта, что у вас (и вашей команды) будет менее подробный код, нет, .

нет.

Дополнительные показания:

...