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感谢您的帮助。这只是一个愚蠢的复制粘贴错误。现在修好了。