声纳抱怨"钻石操作员("<>")应该使用"

Ami*_*mit 4 java sonarqube sonarqube-scan

所以我在我的文件中有下面的代码行

List<String> nameList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

现在我每次运行声纳扫描时都会在上面的行中显示错误,说我应该使用菱形运算符.现在我明白从Java7编译器会自动检测并提供ArrayList的对象类型,但我的问题是,如果我自己在声明类时这样做有害吗?

这是Sonar网站规则链接.我真的不明白他们提供这个规则的例子.

在将代码更改为Sonar建议的内容时,是否有任何性能,效率或任何其他类型的收益?

lea*_*iro 8

如果我在宣布课程时自己这样做会有伤害吗?

不,这样做没有任何伤害,除了添加到代码中的额外冗长.从相同的规则链接我们可以读到它

Java 7引入了菱形运算符(<>)来减少泛型代码的冗长


在将代码更改为Sonar建议的内容时,是否有任何性能,效率或任何其他类型的收益?

除了你(和你的团队)将有一个更简洁的代码,不,没有,这是事实.


进一步阅读:


dav*_*xxx 6

减少你无助和重复的代码,更多的代码是可读和可维护的.

List<String> nameList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

要么

List<String> nameList = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

好不是很多差异.但是现在假设您必须通过Integer更改泛型:String,第一种方法是进行两次修改:

List<Integer> nameList = new ArrayList<Integer>();
      ^------               -------------^
Run Code Online (Sandbox Code Playgroud)

真的不好看.

钻石需要单个:

List<Integer> nameList = new ArrayList<>();
      ^---             
Run Code Online (Sandbox Code Playgroud)

但举另一个例子:

Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
Run Code Online (Sandbox Code Playgroud)

要么

Map<String, List<Integer>> map = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

它让事情变得更加清晰.
在应用程序中,通常会声明并实例化大量的集合和泛型类.重构它真的很便宜.所以就这么做吧.