java - Sonarqube 给出了 HashMap 初始化代码合规问题

标签 java hashmap sonarqube initialization java-stream

我有这段代码,我正在初始化这个 HashMap像:

final HashMap<String, String> propertiesValueMap = new HashMap<String, String>(){{
            put(SOME_STRING, SOME_STRING);
            put(SOME_STRING, SOME_STRING);
            put(SOME_STRING, SOME_STRING);
         }};

上述代码在 SonarQube 中给出了非投诉代码问题。 还有其他方法可以初始化吗?

我知道一种方法,例如

Stream.of(new String[][]{
            { SOME_STRING, SOME_STRING},{SOME_STRING, SOME_STRING}
    }).collect(Collectors.toMap(data->data[0],data->data[1]
    ));

但这会让我返回Map<String,String>我想要 HashMap<String,String> .

最佳答案

正如 Sonarsource 所说:

Double Brace Initialization (DBI) is so obscure...

Double Brace Initialization should not be used

你可以做类似的事情

Map<String, String> propertiesValueMap = createMap();
 
private static Map<String, String> createMap() {
    Map<String, String> myMap = new HashMap<String, String>();
    myMap.put(SOME_STRING, SOME_STRING)
    return myMap;
}

或者,如果您要创建不可变的 Map 并使用 Java 9:

import static java.util.Map.entry;    

Map<String, String> propertiesValueMap = Map.ofEntries(
    entry("SOME_STRING", "SOME_STRING"),
    entry("SOME_STRING2", "SOME_STRING2")
);

关于java - Sonarqube 给出了 HashMap 初始化代码合规问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72084511/

相关文章:

Java在/root文件夹中创建日志文件java0.log和锁定文件

intellij-idea - IntelliJ 上 SonarLint v2.0 的连接模式不起作用?

jenkins - Sonar Qube WaitForQualityGate 步骤的 groovy.lang.ReadOnlyPropertyException

ant - JaCoCo Selenium 测试代码覆盖率并使用 Ant 导入 Sonar

java - 当引用实例对象时,在 Constructor 内部创建的填充 HashMap 返回 null

java - JTree - 如何将背景设置为节点

java - 如何将二维数组转换为一维数组?

java - 方法和字段名称不应仅因大小写而不同(squid :S1845) false positive

Java 根据值对 Hashmap 进行排序

hashmap - 为什么 LinkedList 作为 HashMap 的存储桶实现而不是另一个 Hashmap?