Skip to content

Commit ddeb7a7

Browse files
committed
初始化final静态map
1 parent e69a028 commit ddeb7a7

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# 初始化静态map #
2+
3+
## 问题 ##
4+
5+
怎么在Java中初始化一个静态的map
6+
7+
**方法一**:静态初始化器
8+
9+
**方法二**:实例初始化(匿名子类)
10+
11+
下面是描述上面两种方法的例子
12+
13+
import java.util.HashMap;
14+
import java.util.Map;
15+
public class Test{
16+
private static final Map<Integer, String> myMap = new HashMap<Integer, String>();
17+
static {
18+
myMap.put(1, "one");
19+
myMap.put(2, "two");
20+
}
21+
22+
private static final Map<Integer, String> myMap2 = new HashMap<Integer, String>(){
23+
{
24+
put(1, "one");
25+
put(2, "two");
26+
}
27+
};
28+
}
29+
30+
## 答案 ##
31+
32+
### 答案1 ###
33+
34+
匿名子类初始化器是java的语法糖,我搞不明白为什么匿名类来初始化,而且如果create的类是final的话,它将不起作用
35+
36+
我创建固定大小图的时候使用static初始化器
37+
38+
public class Test{
39+
private static final Map<Integer, String> myMap;
40+
static{
41+
Map<Integer, String> aMap = ...;
42+
aMap.put(1,"one");
43+
aMap.put(2,"two");
44+
myMap = Collections.unmodifiableMap(aMap);
45+
}
46+
}
47+
48+
49+
### 答案2 ###
50+
51+
我喜欢用Guava(是 Collection 框架的增强和扩张)的方法初始化一个静态的,不可改变的map
52+
53+
static fianl Map<Integer, String> myMap = ImmutablMap.of(
54+
1,"one",
55+
2, "two"
56+
)
57+
·
58+
当你的图entry的个数超过5个时候你就不能使用`ImmutableMap.of`可以试试`ImmutableMap.bulider()`
59+
60+
static fianl Map<Integer, String> myMap = ImmutableMap.<Integer, String>builder()
61+
{
62+
.put(1, "one")
63+
.put(2, "two")
64+
65+
.put(15, "fifteen")
66+
.build();
67+
}
68+
69+
70+
# 原文链接 #
71+
72+
http://stackoverflow.com/questions/507602/how-can-i-initialize-a-static-map

0 commit comments

Comments
 (0)