Java 枚举内的映射

Java 枚举内的映射,java,enums,Java,Enums,我有一个这样声明的枚举 public enum KDErrors { KDR_280(280, "Blue"), KDR_281(281, "Red"), KDR_282(282, "Green"), KDR_284(284, "Yellow"); private final int code; private final String color; private KDErrors(int code, String color) { this.cod

我有一个这样声明的枚举

 public enum KDErrors {

  KDR_280(280, "Blue"),
  KDR_281(281, "Red"),
  KDR_282(282, "Green"),
  KDR_284(284, "Yellow");

  private final int code;
  private final String color;

  private KDErrors(int code, String color) {
    this.code = code;
    this.color = color;
  }

  public static String getColorByCode(int colorCode) {

return ???
  }
}
我想通过传递代码获得值,如何使其工作?

将代码更改为:

public enum KDErrors {

    KDR_280(280, "Blue"), KDR_281(281, "Red"), KDR_282(282, "Green"), KDR_284(284, "Yellow");

    private final int code;

    private final String color;

    private KDErrors(int code, String color) {
        this.code = code;
        this.color = color;
    }

    public int getCode() {
        return code;
    }

    public String getColor() {
        return color;
    }

    public static String getColorByCode(int colorCode) {
        for (KDErrors error : KDErrors.values()) {
            if (error.getCode() == colorCode)
                return error.getColor();
        }
        return null;
    }

}
将代码更改为:

public enum KDErrors {

    KDR_280(280, "Blue"), KDR_281(281, "Red"), KDR_282(282, "Green"), KDR_284(284, "Yellow");

    private final int code;

    private final String color;

    private KDErrors(int code, String color) {
        this.code = code;
        this.color = color;
    }

    public int getCode() {
        return code;
    }

    public String getColor() {
        return color;
    }

    public static String getColorByCode(int colorCode) {
        for (KDErrors error : KDErrors.values()) {
            if (error.getCode() == colorCode)
                return error.getColor();
        }
        return null;
    }

}

可以使用枚举或代码的反向查找映射

下面是使用基于代码的枚举反向查找的示例:

public enum KDErrors {

  private static Map<Integer, KDErrors> reverseLookUp = new HashMap<>();

  static{
    for (KDErrors error : KDErrors.values()) {
      reverseLookUp.put(error.code, error);
    }
  }
  //you method would look like
  public static String getColorByCode(int colorCode) {
    if(reverseLookUp.get(colorCode) == null)
      return null;
    else 
      return reverseLookUp.get(colorCode).color;
  }
}

可以使用枚举或代码的反向查找映射

下面是使用基于代码的枚举反向查找的示例:

public enum KDErrors {

  private static Map<Integer, KDErrors> reverseLookUp = new HashMap<>();

  static{
    for (KDErrors error : KDErrors.values()) {
      reverseLookUp.put(error.code, error);
    }
  }
  //you method would look like
  public static String getColorByCode(int colorCode) {
    if(reverseLookUp.get(colorCode) == null)
      return null;
    else 
      return reverseLookUp.get(colorCode).color;
  }
}

你有几个简单的选择。一种是使用地图,另一种是线性搜索

使用地图可能效率更高,但会占用更多空间。对于少数枚举来说,这可能不是一个问题

public enum KDErrors {

  KDR_280(280, "Blue"),
  KDR_281(281, "Red"),
  KDR_282(282, "Green"),
  KDR_284(284, "Yellow"),

  private static Map<Integer, String> codeMap = new HashMap<>();

  private final int code;
  private final String color;

  private KDErrors(int code, String color) {
    this.code = code;
    this.color = color;
    codeMap.put(code, color);
  }

  public static String getColorByCode(int colorCode) {
   return codeMap(colorCode);
  }
}

你有几个简单的选择。一种是使用地图,另一种是线性搜索

使用地图可能效率更高,但会占用更多空间。对于少数枚举来说,这可能不是一个问题

public enum KDErrors {

  KDR_280(280, "Blue"),
  KDR_281(281, "Red"),
  KDR_282(282, "Green"),
  KDR_284(284, "Yellow"),

  private static Map<Integer, String> codeMap = new HashMap<>();

  private final int code;
  private final String color;

  private KDErrors(int code, String color) {
    this.code = code;
    this.color = color;
    codeMap.put(code, color);
  }

  public static String getColorByCode(int colorCode) {
   return codeMap(colorCode);
  }
}

如果在地图中找不到颜色代码,这将引发NullPointerException。在访问get上的字段之前,应该映射或检查get的返回值是否为null。不需要调用get两次。执行类似于err=reverseLookUp.getcolorCode的操作;返回err==null?null:err.color;您可以用IFER替换三元op!=null返回err.color;返回null;如果您有这样的首选项。如果在地图中找不到颜色代码,这将引发NullPointerException。在访问get上的字段之前,应该映射或检查get的返回值是否为null。不需要调用get两次。执行类似于err=reverseLookUp.getcolorCode的操作;返回err==null?null:err.color;您可以用IFER替换三元op!=null返回err.color;返回null;如果您有这样的首选项。如果您没有在任何地方直接使用枚举实例,只需声明一个静态映射并将键值添加为代码颜色,并跳过整个枚举创建。我认为这不是一个soublicate。OP不需要枚举,OP需要枚举中的其他属性如果您没有在任何地方直接使用枚举实例,只需声明一个静态映射并将键值添加为代码颜色,并跳过整个枚举创建。我认为这不是一个soublicate。OP不需要枚举,OP需要来自enum@Jens. 因为它通常比在整个物品架上进行线性搜索更好。如果枚举中只有几个项目,这没什么大不了的,但随着数量的增加,映射方法将开始大放异彩。@Jens感谢您的帮助。这只是一个愚蠢的复制粘贴错误。“现在修好了。”詹斯说。因为它通常比在整个物品架上进行线性搜索更好。如果枚举中只有几个项目,这没什么大不了的,但随着数量的增加,映射方法将开始大放异彩。@Jens感谢您的帮助。这只是一个愚蠢的复制粘贴错误。现在修好了。