猿问

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

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

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

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

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

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


当年话下
浏览 176回答 3
3回答

拉莫斯之舞

更少的无助和重复的代码,更多的代码是可读和可维护的。List<String> nameList = new ArrayList<String>();或者List<String> nameList = new ArrayList<>();好吧,差别不大。但是假设现在您必须更改 generic: Stringby Integer,使用第一种方式您必须进行两次修改:List<Integer> nameList = new ArrayList<Integer>();&nbsp; &nbsp; &nbsp; ^------&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-------------^真的不好看。钻石只需要一个:List<Integer> nameList = new ArrayList<>();&nbsp; &nbsp; &nbsp; ^---&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;但再举一个例子:Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();或者Map<String, List<Integer>> map = new HashMap<>();它使事情更清楚。在应用程序中,您通常会声明和实例化大量集合和泛型类。重构它真的很便宜。所以就去做吧。

摇曳的蔷薇

如果我在宣布课程时自己做会有什么危害吗?不,这样做没有任何害处,除了添加到代码中的额外冗长。从同一个规则链接我们可以读到Java 7 引入了菱形运算符 (<>)以减少泛型代码的冗长将代码更改为 Sonar 建议的内容是否有任何性能、效率或任何其他类型的收益?除了您(和您的团队)将有一个不那么冗长的代码,不,没有.

白衣非少年

这条规则背后的全部要点是:在 java 7 中,编译器能够从类型本身推断构造函数的类型。为什么要在构造函数中省略泛型类型?2件事:两次指定类型更冗长如果您决定更改集合,则不需要两次更改泛型的类型。保持原样有害吗?不是真的。但在您的团队中拥有一致的代码风格总是更好。因此,如果您的团队使用声纳进行代码样式检查,为了一致性起见,您应该遵守它。
随时随地看视频慕课网APP

相关分类

Java
我要回答