java unmodifiableMap,枚举值为“丢失”值

时间:2014-08-06 08:35:19

标签: java map enums

我有一个奇怪的问题。我有一个java类,看起来像这样:

public class VagueDate {
  private static String DAY = "D";
  private static String TO_YEAR = "-Y";

  public enum Type {
    DAY(VagueDate.DAY), TO_YEAR(VagueDate.TO_YEAR);

    private String string;

    private Type(String string) {
      this.string = string;
    }

    public String getStringRepresentation() {
      return string;
    }  
  }

  public static final Map<String, Type> typeMapping;
  static {
    HashMap<String, Type> myMap = new HashMap<String, Type>();
    myMap.put(DAY, Type.DAY);
    myMap.put(TO_YEAR, Type.TO_YEAR);

    typeMapping = Collections.unmodifiableMap(myMap);
   };

  private LocalDate startDate;
  private LocalDate endDate;
  private Type type;

  public VagueDate(LocalDate start, LocalDate end, Type type) {
    this.startDate = start;
    this.endDate = end;
    this.type = type;
  }

  public VagueDate(LocalDate start, LocalDate end, String dateType) {
    this(start, end, typeMapping.get(dateType));
  }

// getter, setter, etc
}
Everythink似乎工作正常,我可以用两个构造函数创建VagueDate对象。但是当我在webapp中使用该类时,有时候会发生一件奇怪的事情:地图typeMapping看起来像这样:“D” - &gt; null,“ - Y” - &gt;空值 。 如果发生这种情况,它就会像这样。

如何修改不可修改地图中的条目?或者是否不允许将枚举用作地图值?

此致

丹尼尔

1 个答案:

答案 0 :(得分:0)

可能是服务器序列化和反序列化您的不可修改的地图?由于您的枚举不可序列化,因此无法恢复。我在tomcat实例上看到过类似的错误。

要对此进行测试,请将地图定义为瞬态或使您的枚举可序列化。