为了账号安全,请及时绑定邮箱和手机立即绑定

声纳抱怨“应该使用菱形运算符 (”<>“)”

声纳抱怨“应该使用菱形运算符 (”<>“)”

当年话下 2021-08-25 09:32:57
所以我的文件中有以下代码行List<String> nameList = new ArrayList<String>();现在,每次我运行声纳扫描时,它都会在上面的行中显示错误,说我应该改用菱形运算符。现在我明白了,Java7 编译器会自动检测并提供 ArrayList 的对象类型,但我的问题是,如果我在声明类时自己这样做会有危害吗?这是来自 Sonar 网站的规则链接。我真的不明白他们提供的这个规则的例子。将代码更改为 Sonar 建议的内容是否有任何性能、效率或任何其他类型的收益?
查看完整描述

3 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

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


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

或者


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

好吧,差别不大。


但是假设现在您必须更改 generic: Stringby 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<>();

它使事情更清楚。


在应用程序中,您通常会声明和实例化大量集合和泛型类。重构它真的很便宜。所以就去做吧。


查看完整回答
反对 回复 2021-08-25
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

如果我在宣布课程时自己做会有什么危害吗?

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

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


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

除了您(和您的团队)将有一个不那么冗长的代码,不,没有.



查看完整回答
反对 回复 2021-08-25
?
白衣非少年

TA贡献1155条经验 获得超0个赞

这条规则背后的全部要点是:在 java 7 中,编译器能够从类型本身推断构造函数的类型。

为什么要在构造函数中省略泛型类型?

2件事:

  • 两次指定类型更冗长

  • 如果您决定更改集合,则不需要两次更改泛型的类型。

保持原样有害吗?不是真的。但在您的团队中拥有一致的代码风格总是更好。因此,如果您的团队使用声纳进行代码样式检查,为了一致性起见,您应该遵守它。


查看完整回答
反对 回复 2021-08-25
  • 3 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信