Java 如何使用guava初始化空ImmutableEnumMap?
我有一个构造函数,它将Java 如何使用guava初始化空ImmutableEnumMap?,java,guava,enum-map,Java,Guava,Enum Map,我有一个构造函数,它将Map作为参数。因此,我正在初始化NO_操作变量,如下所示,使用空的不可变映射 public static final Processor NO_OPERATION = new Processor(ImmutableMap.<ProcessInfoEnum, String>of()); private final Map<ProcessInfoEnum, String> values; public Processor(Map<P
Map
作为参数。因此,我正在初始化NO_操作
变量,如下所示,使用空的不可变映射
public static final Processor NO_OPERATION = new Processor(ImmutableMap.<ProcessInfoEnum, String>of());
private final Map<ProcessInfoEnum, String> values;
public Processor(Map<ProcessInfoEnum, String> values) {
this.values = values;
}
现在,我如何使用ImmutableEnumMap
为NO\u操作编写相同的等效行,以便它可以初始化空的ImmutableEnumMap
// obviously this doesn't work
public static final Processor NO_OPERATION = new Processor(ImmutableEnumMap.<ProcessInfoEnum, String>of());
private final EnumMap<ProcessInfoEnum, String> values;
public Processor(EnumMap<ProcessInfoEnum, String> values) {
this.values = values;
}
//显然这不起作用
public static final Processor NO_OPERATION=新处理器(ImmutableEnumMap.of());
私有最终枚举映射值;
公共处理器(枚举映射值){
这个值=值;
}
由于ImmutableEnumMap
是一个包私有类,因此我无法执行ImmutableEnumMap.of()
。还有其他方法吗?没有公共的ImmutableEnumMap类型,因此您必须将其键入ImmutableMap,这样您就可以使用ImmutableMap.of(),而不用担心枚举部分。没有区别。请考虑可能的映射。我试过了,但它不起作用,它要求我将构造函数定义更改为ImmutableMap
,它说Guava 14添加了Maps.immutableEnumMap()。是的,但这一行仍然不起作用。我已经试过了。在我的例子中,我的构造函数使用EnumMap作为输入参数,如果我声明NO_OPERATION
aspublic static final Processor NO_OPERATION=new Processor(ImmutableMap.of())代码>,我收到一个编译错误,要求我将构造函数更改为ImmutableMap
,而不是使用EnumMap
。如果您的构造函数使用EnumMap,则必须创建EnumMap。ImmutableEnumMap扩展了ImmutableMap;它不扩展EnumMap。您必须创建一个可变的EnumMap,没有其他选择。根据定义,所有枚举映射都是可变的。(您可能希望重新考虑在构造函数中首先接受EnumMap的决定。)@LouisWasserman“根据定义,所有EnumMap都是可变的”--从理论上讲,通过覆盖put
,putAll
,扩展EnumMap
来创建您自己的ImmutableEnumMap
类难道不可能吗,和删除以引发异常?还是有什么微妙的原因让这不起作用?(我不是建议用这个来解决。)@LouisWasserman哦,好吧。“我想我现在必须去忏悔,因为我提出了这种可能性。”路易斯瓦瑟曼我有一个关于番石榴贮藏的问题。想看看你能不能帮我?
// obviously this doesn't work
public static final Processor NO_OPERATION = new Processor(ImmutableEnumMap.<ProcessInfoEnum, String>of());
private final EnumMap<ProcessInfoEnum, String> values;
public Processor(EnumMap<ProcessInfoEnum, String> values) {
this.values = values;
}