Java 使用HashMap和List进行嵌套双大括号初始化
我正在尝试控制我的应用程序的某些权限。 昨天我学习了如何创建双大括号初始化,它帮助了很多。但是现在我试着用它嵌套,但是我得到了一个Java 使用HashMap和List进行嵌套双大括号初始化,java,android,collections,Java,Android,Collections,我正在尝试控制我的应用程序的某些权限。 昨天我学习了如何创建双大括号初始化,它帮助了很多。但是现在我试着用它嵌套,但是我得到了一个 ')' expected 来自IDE(Android Studio) 这是我的密码: public static final Map<String, List> ALL_PERMISSIONS = new HashMap<String, List>() {{ put("Change-maps", new ArrayList<I
')' 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);}};);
}};
public static final Map ALL_PERMISSIONS=new HashMap(){{
put(“更改映射”,new ArrayList(){{add(R.id.button_Change_view);}};);
put(“存储信息视图”,新的ArrayList(){{add(R.id.details_fragment);}};);
put(“竞争对手层”,新的ArrayList(){{add(R.id.switch_concorrentes);}};
}};
我是不是遗漏了什么?
这是一个糟糕的方法吗
PS:我正在尝试这种方法,因为将来我将使用带有多个视图(整数)的一些键,以及带有字符串列表的一些键。如果您查看以下代码:
Map<String, String> map = new HashMap<String, String>();
map.put( "string1", "string2" );
因此,您不需要在前面加上的右括号,如下所示:
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);}});
}};
public static final Map ALL_PERMISSIONS=new HashMap(){{
put(“更改映射”,new ArrayList(){{add(R.id.button_Change_view);});
put(“存储信息视图”,新ArrayList(){{add(R.id.details_fragment);}});
put(“竞争对手层”,新的ArrayList(){{add(R.id.switch_concorrentes);}});
}};
如果您查看此代码:
Map<String, String> map = new HashMap<String, String>();
map.put( "string1", "string2" );
因此,您不需要在前面加上的右括号,如下所示:
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);}});
}};
public static final Map ALL_PERMISSIONS=new HashMap(){{
put(“更改映射”,new ArrayList(){{add(R.id.button_Change_view);});
put(“存储信息视图”,新ArrayList(){{add(R.id.details_fragment);}});
put(“竞争对手层”,新的ArrayList(){{add(R.id.switch_concorrentes);}});
}};
您应该格式化/缩进代码(Ctrl-Shift-F
在Eclipse中默认情况下)
您将看到匿名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);
}
});
}
};
public static final Map ALL_PERMISSIONS=new HashMap(){
{
放置(“更改映射”,新建ArrayList(){
{
添加(R.id.button\u change\u view);
}
});
放置(“存储信息视图”,新建ArrayList(){
{
添加(R.id.details\u片段);
}
});
放置(“竞争对手层”,新ArrayList(){
{
添加(R.id.switch\u concorrentes);
}
});
}
};
注意
还要注意原始类型或抑制警告 您应该格式化/缩进代码(Ctrl-Shift-F
在Eclipse中默认设置)
您将看到匿名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);
}
});
}
};
public static final Map ALL_PERMISSIONS=new HashMap(){
{
放置(“更改映射”,新建ArrayList(){
{
添加(R.id.button\u change\u view);
}
});
放置(“存储信息视图”,新建ArrayList(){
{
添加(R.id.details\u片段);
}
});
放置(“竞争对手层”,新ArrayList(){
{
添加(R.id.switch\u concorrentes);
}
});
}
};
注意
还要注意原始类型或抑制警告 我不鼓励使用双括号初始化。正如所解释的,它可能
让你的同事感到惊讶,而且很难阅读
损害性能
可能导致对象相等性问题(创建的每个对象都有一个
唯一类对象)
如果可能的话,我建议使用
例如:
public static final Map<String, List> ALL_PERMISSIONS = ImmutableMap.<String, List>of(
"Change-maps", ImmutableList.of(R.id.button_change_view),
"Stores-info-view", ImmutableList.of(R.id.details_fragment),
"Competitors-layer", ImmutableList.of(R.id.switch_concorrentes)
);
public static final Map ALL_PERMISSIONS=ImmutableMap.of(
“更改地图”,不可变列表(R.id.按钮更改视图),
“存储信息视图”,不可变列表(R.id.details\u片段),
“竞争对手层”,不可变列表(R.id.switch\u concorrentes)
);
或者,如果需要添加更多元素:
public static final Map<String, List> ALL_PERMISSIONS = new ImmutableMap.Builder<String, List>()
.put("Change-maps", ImmutableList.of(R.id.button_change_view))
.put("Stores-info-view", ImmutableList.of(R.id.details_fragment))
.put("Competitors-layer", ImmutableList.of(R.id.switch_concorrentes))
//(... and so on...
.build();
public static final Map ALL_PERMISSIONS=new ImmutableMap.Builder()
.put(“更改地图”,不可变列表(R.id.button\u Change\u view))
.put(“存储信息视图”,不可更改的列表(R.id.details\u片段))
.put(“竞争对手层”,不可变列表(R.id.switch_concorrentes))
//(……等等。。。
.build();
我不鼓励使用双括号初始化。正如所解释的,它可能
让你的同事感到惊讶,而且很难阅读
损害性能
可能导致对象相等性问题(创建的每个对象都有一个
唯一类对象)
如果可能的话,我建议使用
例如:
public static final Map<String, List> ALL_PERMISSIONS = ImmutableMap.<String, List>of(
"Change-maps", ImmutableList.of(R.id.button_change_view),
"Stores-info-view", ImmutableList.of(R.id.details_fragment),
"Competitors-layer", ImmutableList.of(R.id.switch_concorrentes)
);
public static final Map ALL_PERMISSIONS=ImmutableMap.of(
“更改地图”,不可变列表(R.id.按钮更改视图),
“存储信息视图”,不可变列表(R.id.details\u片段),
“竞争对手层”,不可变列表(R.id.switch\u concorrentes)
);
或者,如果需要添加更多元素:
public static final Map<String, List> ALL_PERMISSIONS = new ImmutableMap.Builder<String, List>()
.put("Change-maps", ImmutableList.of(R.id.button_change_view))
.put("Stores-info-view", ImmutableList.of(R.id.details_fragment))
.put("Competitors-layer", ImmutableList.of(R.id.switch_concorrentes))
//(... and so on...
.build();
public static final Map ALL_PERMISSIONS=new ImmutableMap.Builder()
.put(“更改地图”,不可变列表(R.id.button\u Change\u view))
.put(“存储信息视图”,不可更改的列表(R.id.details\u片段))
.put(“竞争对手层”,不可变列表(R.id.switch_concorrentes))
//(……等等。。。
.build();
好像你遗漏了)
某个地方…只要仔细检查大括号。好像你遗漏了)
某个地方。。。只要仔细检查支架。