有没有办法在密钥值对中用java编写静态最终Hashtable,就像你可以方便地初始化字符串数组一样:
String [] foo = {"A","AB"};
基本上我的意思是不必为key:value对写“put”,而是可能是这样的:
Hashtable<String, String> foo = {"JJ":"222","KK":"222"}
IMO看起来更优雅。
(我知道初始化需要在一个静态块中。我现在暂时离开)
答案 0 :(得分:10)
匿名内部类将为您提供双括号初始化,这在某些情况下很有用:
static final Map<String, String> map = new HashMap<String, String>() {{
put("foo", "bar");
put("x", "y");
}};
无论如何,@ michael667的答案可能是最好的
答案 1 :(得分:8)
您可以使用番石榴ImmutableMap:
map = ImmutableMap.of(key1, value1, key2, value2);
这些便利方法适用于一到五个元素。如果您需要更多,可以使用ImmutableMap.Builder:
static final ImmutableMap<String, Integer> WORD_TO_INT =
new ImmutableMap.Builder<String, Integer>()
.put("one", 1)
.put("two", 2)
.put("three", 3)
.build();
答案 2 :(得分:7)
不,Java没有地图文字,但它确实有数组文字。
static final Map<String, String> map;
static {
map = new HashMap<String, String>();
String[][] pairs = {
{"foo", "bar"},
{"x", "y"}
};
for (String[] pair : pairs) {
map.put(pair[0], pair[1]);
}
}
当然,这并没有真正为简单的复制和粘贴put
解决方案添加任何内容,如果您的密钥和值类型不同,它也无法正常工作
答案 3 :(得分:-1)
不,你正在寻找像C#的collection initializers这样的东西,它目前在Java中不存在。
您可以使用匿名类来保存一点点输入,但您仍然需要编写put
。