簡體   English   中英

枚舉內映射

[英]Mapping inside an enum

我有一個這樣聲明的枚舉

 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 {

  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;
  }
}

您可以使用幾個簡單的選項。 一種是使用Map<Integer, String> ,另一種是進行線性搜索。

使用地圖可能會更有效,但會占用更多空間。 對於少數枚舉來說,這可能不是問題。

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);
  }
}

進行線性搜索可以避免您不得不分配其他結構,但是對於一般情況而言,這比在HashMap進行查找要慢一些:

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) {
   for(KDErrors err : KDErrors.values()) {
       if(err.getCode() == colorCode)
           return error.getColor();
    }
    return null;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM