我有一个奇怪的问题。我有一个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;空值 。
如果发生这种情况,它就会像这样。
如何修改不可修改地图中的条目?或者是否不允许将枚举用作地图值?
此致
丹尼尔
答案 0 :(得分:0)
可能是服务器序列化和反序列化您的不可修改的地图?由于您的枚举不可序列化,因此无法恢复。我在tomcat实例上看到过类似的错误。
要对此进行测试,请将地图定义为瞬态或使您的枚举可序列化。