[英]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.