Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用guava初始化空ImmutableEnumMap?_Java_Guava_Enum Map - Fatal编程技术网

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
as
public 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;
  }