我正在尝试控制我的应用上的某些权限。 昨天我学习了如何创建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列表的键。
答案 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);}});
}};