Java中HashMap的文字声明

Literal declaration of HashMap in Java

本问题已经有最佳答案,请猛点这里访问。

JavaScript中,可以一次声明JSON对象的所有键和值组合,如下所示…

1
2
3
4
5
6
7
8
var myJSON = {
    'key1' : 'value 1',
    'key2' : 'value 2',
    'key3' : 'value 3',
    'key4' : 'value 4',
    'key5' : 'value 5',
    'key6' : 'value 6'
};

我想知道我们是否可以在Java中为HashMaps做类似的事情。

1
2
3
4
5
HashMap<String, String> map = new HashMap<String, String>(
   "Key 1","Value 1",
   "Key 2","Value 2",
   "Key 3","Value 3"
);

基本上,我需要将它作为一个一次性只读的东西,作为代码其他部分的配置。我搜索并尝试了一些解决方案,但无法使它们发挥作用。还是有更好的方法可以做到?


虽然{{(双大括号)是反模式的,但您可以这样编写

1
2
3
4
5
HashMap<String, String> map = new HashMap<String, String>(){{
put("Key 1","Value 1");
put("Key 2","Value 2");
put("Key 3","Value 3");    
}};

编辑:

如果您正在寻找一种更好的方法来放置元素,请遍历JSON并将键值放入循环中。


在爪哇没有地图文字的概念,但是你可以很容易地写出一个实用的方法来达到类似的效果。例如,请参见此实现。然后可以初始化映射(使用静态导入):

1
Map<String, String> map = map("k1","v1","k2","v2");

另一种方法是使用"双括号初始化"语法,但它创建了一个匿名内部类,这不一定是个好主意。