我有一个像这样宣布的枚举
WARNING: Can not upload the directory '\\Server\Data\subfolders001' to azure. If you want to upload directory, please use "ls -File -Recurse | Set-AzureStorageBlobContent -Container containerName".
我希望通过传递代码来获取值,我该如何使其工作?
答案 0 :(得分:2)
将代码更改为:
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;
}
}
答案 1 :(得分:1)
您可以使用枚举或代码
的反向查找映射以下是基于代码使用反向查找枚举的示例:
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;
}
}
答案 2 :(得分:1)
您可以使用几种简单的选项。一种是使用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;
}
}