你 并不 需要单独的声明和初始化。如果您知道怎么做,那么所有这些都可以在一行中完成!
// assumes your pre declaring the constants ONE, FRED_TEXT etc is before this lineprivate static final Map<String, int[]> myMap = Collections.unmodifiableMap( new HashMap<String, int[]>() {{ put(FRED_TEXT, new int[] {ONE, TWO, FOUR}); put(DAVE_TEXT, new int[] {TWO, THREE}); }});这里我们有一个带有初始化块的匿名类,该块是在构造函数之后的构造中执行的代码块,在这里我们已使用它来加载地图。
有时将这种语法/构造错误地称为“双括号初始化”(我想是因为有两个相邻的括号),但实际上没有这种东西。
关于这两个很酷的事情是:
- 它将声明与内容结合起来,并且
- 因为初始化是内联的,所以您也可以对进行内联调用
Collections.unmodifiableMap()
,从而使整齐的单行声明,初始化和转换成不可修改的形式。
如果您不需要/希望地图不可修改,请忽略该调用:
private static final Map<String, int[]> myMap = new HashMap<String, int[]>() {{ put(FRED_TEXT, new int[] {ONE, TWO, FOUR}); put(DAVE_TEXT, new int[] {TWO, THREE});}};


