java – 如何将值映射到枚举?

前端之家收集整理的这篇文章主要介绍了java – 如何将值映射到枚举?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
给定一个枚举,其中每个实例与一些值相关联:
public enum sqlState
{
  SUCCESSFUL_COMPLETION("00000"),WARNING("01000");

  private final String code;
  sqlState(String code)
  {
    this.code = code;
  }
}

如何构建一个有效反向查找的地图?我试过以下:

public enum sqlState
{
  SUCCESSFUL_COMPLETION("00000"),WARNING("01000");

  private final String code;
  private static final Map<String,sqlState> codeToValue = Maps.newHashMap();
  sqlState(String code)
  {
    this.code = code;
    codeToValue.put(code,this); // problematic line
  }
}

但Java抱怨:非法引用来自初始化程序的静态字段.也就是说,静态Map在所有枚举值之后被初始化,所以你不能从构造函数中引用它.有任何想法吗?

解决方法

使用:
static {
  for (sqlState sqlState : values()){
     codeToValue.put(sqlState.code,sqlState);
  }
}

猜你在找的Java相关文章