为了将整数转换为枚举(在json文件中),我声明了一些像这样的HashMaps:
final static HashMap<Integer, Types> getType = new HashMap<Integer, Types>() {
{
put(1, Types.TYPE1);
put(2, Types.TYPE2);
....
}
};
现在eclipse给了我以下警告:
The serializable class does not declare a static final serialVersionUID field of type long
我已经找到错误消息here的一个很好的解释。但是我不知道GWT是怎么回事。 GWT在任何地方使用SerialVersionUID,还是实际上是由closur编译器删除的?据我所知,它不是必需的。
答案 0 :(得分:1)
serialVersionUID
仅用于Java序列化(使用JVM Serializable
契约),这在GWT中是非常明显的。
这意味着你可以安全地忽略警告;你还可以安全地添加一个serialVersionUID
来安抚Eclipse,因为它将被编译器修剪。
(我相信您也可以配置Eclipse,因此它不会生成警告)
此外,您不应该以这种方式初始化HashMap
(也就是说,创建一个在其初始化程序中初始化自己的HashMap
的匿名子类)。你最好使用静态初始化器:
final static Map<Integer, Types> getType;
static {
getType = new HashMap<Integer, types>();
getType.put(1, Types.TYPE1);
getType.put(2, Types.TYPE2);
...
// you could even use Collections.unmodifiableMap here
}
或使用Guava's ImmutableMap: final static Map getType = ImmutableMap.builder() .put(1,Types.TYPE1) .put(1,Types.TYPE2) ... .build();
更好的是,如果您的整数值使用枚举常量的声明顺序映射,您只需使用Enum#values()而不是map:
Types typeFromInt(int i) {
return Types.values()[i];
}