elo*_*esp 4 java dictionary initialization
是否可以声明并初始化Hashtableor Map,这样我们就不必在两个不同的步骤中声明和初始化?
// declare first
Hashtable<String, Integer> numbers = new Hashtable<String, Integer>(3);
// then initialize
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
Run Code Online (Sandbox Code Playgroud)
例如,在 ruby 和 javascript 中,有文字来定义它们:
numbers = {
one: 1,
two: 2,
three: 3,
}
Run Code Online (Sandbox Code Playgroud)
对于 Java 9 及更高版本,您可以使用Map#of, 以及Map#ofEntrieswith Map#entry:
Map<String, String> example = Map.ofEntries(
Map.entry("1", "one"),
Map.entry("2", "two"),
Map.entry("3", "three"),
//...
);
Run Code Online (Sandbox Code Playgroud)
对于较短的文字(10 个或更少的条目),您可以Map#of直接使用(尽管 的语法有点令人困惑Key1, Value1, Key2, Value2, ...):
Map<String, String> example = Map.of("1", "one", "2", "two");
Run Code Online (Sandbox Code Playgroud)
在 Java 9 之前,通常只需要初始化常量Map对象,为此static初始化块也很有用:
private static final Map<String, String> MY_CONSTANT;
static {
Map<String, String> setup = new HashMap<>();
setup.put("1", "one");
setup.put("2", "two");
setup.put("3", "three");
MY_CONSTANT = Collections.unmodifiableMap(setup);
}
Run Code Online (Sandbox Code Playgroud)
这将允许您创建一个常量Map,同时允许您在设置之前修改地图。
正如@Pshemo所指出的,有很多理由避免双括号初始化,但是“规则”的显着例外通常是在常量中,与上面的示例非常相似(因为不会创建许多匿名类)。然而,即使在这种情况下,仍然可以解决双括号初始化的需要,因此如果可能的话,总体上最好避免。我认为这是不可能的唯一情况是在类中的常量上下文中enum,双括号 init 可能确实是实现此目的的唯一正确方法。
| 归档时间: |
|
| 查看次数: |
4891 次 |
| 最近记录: |