使用HashMap和List

时间:2015-04-29 14:10:08

标签: java android collections

我正在尝试控制我的应用上的某些权限。 昨天我学习了如何创建Double Brace Initialization,它帮助了很多。但现在我试图使用它嵌套,但我得到了一个

')' expected

来自IDE(Android Studio)

这是我的代码:

public static final Map<String, List> ALL_PERMISSIONS = new HashMap<String, List>() {{
    put("Change-maps", new ArrayList<Integer>(){{add(R.id.button_change_view);}};);
    put("Stores-info-view", new ArrayList<Integer>(){{add(R.id.details_fragment);}};);
    put("Competitors-layer", new ArrayList<Integer>(){{add(R.id.switch_concorrentes);}};);
}};
我错过了什么吗? 这是一个糟糕的方法吗?

PS:我正在尝试这种方法,因为将来我会使用一些具有多个View(整数)的键,以及一些带有String列表的键。

2 个答案:

答案 0 :(得分:3)

您应该格式化/缩进代码(默认情况下在Eclipse中为Ctrl-Shift-F)。

你会看到你的匿名ArrayList类声明(在大括号外面)不能跟一个分号。

这是一个可行的格式化示例:

public static final Map<String, List> ALL_PERMISSIONS = new HashMap<String, List>() {
    {
        put("Change-maps", new ArrayList<Integer>() {
            {
                add(R.id.button_change_view);
            }
        });
        put("Stores-info-view", new ArrayList<Integer>() {
            {
                add(R.id.details_fragment);
            }
        });
        put("Competitors-layer", new ArrayList<Integer>() {
            {
                add(R.id.switch_concorrentes);
            }
        });
    }
};

注意

还要注意原始类型或抑制警告。

答案 1 :(得分:2)

如果你看一下这段代码:

Map<String, String> map = new HashMap<String, String>();
map.put( "string1", "string2" );

您可以注意到,传入参数的对象后面没有;

在你的情况下,你要传递的第二个对象就是这个:

new ArrayList<Integer>(){{add(R.id.button_change_view);}}

因此,在;的右括号之前不需要put,如下所示:

public static final Map<String, List> ALL_PERMISSIONS = new HashMap<String, List>() {{
        put("Change-maps", new ArrayList<Integer>(){{add(R.id.button_change_view);}});
        put("Stores-info-view", new ArrayList<Integer>(){{add(R.id.details_fragment);}});
        put("Competitors-layer", new ArrayList<Integer>(){{add(R.id.switch_concorrentes);}});
}};