[英]A bad practice regarding java enum
這個問題與某種不良的編程習慣有關。 我正在尋找一些好的文章,以解釋它以及它為什么不好的原因。 不幸的是,我不知道這種做法的名字或行話。 因此,我將嘗試描述它,並請您告訴我它的名稱,並可能使我參考有關該主題的好文章。
假設我們有一些枚舉:
public enum Day
{
SUNDAY, MONDAY, ...
}
接下來,假設服務器端程序員將數字id附加到每一天。 當然,正確的做法是使用EnumMap
Day
映射到Integer
,該EnumMap
僅在服務器端代碼中定義和使用。 相反,他弄亂了通用代碼並添加了getId()
方法:
public enum Day
{
SUNDAY {public int getId() {return 100;}},
MONDAY {public int getId() {return 101;}},
...;
public abstract int getId();
}
接下來,GUI程序員希望每天都附加一個字符串,因此他添加了自己的東西:
public enum Day
{
SUNDAY {
public int getId() {return 100;}
public String getName() {return "sunday";}
},
MONDAY {
public int getId() {return 101;};
public String getName() {return monday";}
},
...;
public abstract int getId();
public abstract String getName();
}
你明白了...
你怎么稱呼這個東西? 知道關於它的任何好文章嗎?
我不明白為什么這很糟糕,除了它比應該的更為冗長。 您可以將其替換為:
public enum Day {
SUNDAY(0, "sunday"),
MONDAY(1, "monday"),
TUESDAY(2, "tuesday"),
WEDNESDAY(3, "wednesday"),
THURSDAY(4, "thursday"),
FRIDAY(5, "friday"),
SATURDAY(6, "saturday");
private final int mIndex;
private final String mName;
Day (int index, String name) {
mIndex = index;
mName = name;
}
public int getIndex () {
return mIndex;
}
public String getName () {
return mName;
}
public static Day fromIndex (int index) {
if (index < 0 || index > 6) {
throw new IllegalArgumentException(index + " is not a valid day index.");
}
Day result = null;
for (Day day : values()) {
if (day.mIndex == index) {
result = day;
break;
}
}
return result;
}
}
我經常使用此模式來整理來自Web服務的數據,該數據以整數形式返回。 這肯定比使用Day.ordinal()
更好,因為這樣,枚舉中的定義順序就變得很重要,並且要求索引是順序的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.