首页 > 解决方案 > 在 <> 中使用对象名称作为新的 ArrayList是正确的还是可以只使用<>?

问题描述

我创建了如下(1)方式的泛型,但是当声纳给我错误替换时,它有(2)。我需要知道,使用 <> 运算符创建泛型的最佳和正确方法是什么。

不合规代码示例

List<String> strings = new ArrayList<String>();  // Noncompliant
Map<String,List<Integer>> map = new HashMap<String,List<Integer>>();  // Noncompliant

合规解决方案

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

声纳代码分析给出以下警告:

ava 7 引入了菱形运算符 (<>) 以减少泛型代码的冗长。例如,您现在可以使用 <> 简化构造函数声明,而不必在声明和构造函数中声明 List 的类型,编译器将推断类型。

请注意,当项目的 sonar.java.source 低于 7 时,此规则会自动禁用。

标签: javasonarqubegeneric-programming

解决方案


你是对的,使用菱形运算符(在 Java 7 中引入)作为:

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

更好,因为让编译器根据声明的类型推断参数。

另请参阅:Java 7:我们真的需要在菱形运算符中使用 <> 吗?


推荐阅读