所以......這是非常醜陋的,但看起來可能的解決方案:與名稱值枚舉
enum FirstEnum {
FIRST("name_1", "name 1"),
SECOND("name_2", "name 2");
FirstEnum(String name, String description) {
replaceName(name);
this.name = name;
this.description = description;
}
private String name;
private String description;
private void replaceName(String newName) {
try {
Field fieldName = getClass().getSuperclass().getDeclaredField("name");
fieldName.setAccessible(true);
fieldName.set(this, newName);
fieldName.setAccessible(false);
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return getName();
}
}
enum SecondEnum {
FIRST("name_1", 1),
SECOND("name_2", 2);
SecondEnum(String name, Integer code) {
replaceName(name);
this.name = name;
this.code = code;
}
private String name;
private Integer code;
private void replaceName(String newName) {
try {
Field fieldName = getClass().getSuperclass().getDeclaredField("name");
fieldName.setAccessible(true);
fieldName.set(this, newName);
fieldName.setAccessible(false);
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
public Integer getCode() {
return code;
}
public String getName() {
return name;
}
@Override
public String toString() {
return getName();
}
}
在上面的「私人無效replaceName(字符串newName)將」代碼取代了第一和第二名。然後你可以用所需的數據構造地圖。但是...你真的需要它嗎?)
Map<String, Integer> result = new HashMap<String, Integer>();
for (Object key : FirstEnum.values()) {
String keyString = String.valueOf(key);
result.put(keyString, SecondEnum.valueOf(keyString).getCode());
}
你是什麼意思的「地圖相同的名字」?你能擴展你實際想要做的事嗎?你想從一個枚舉類型轉換到另一個?你是否想給一個特定的'String'賦值? – unholysampler 2014-10-02 20:53:36