这个问题是关于某种糟糕的编程习惯。 我正在寻找一些可以解释它的好文章以及它为什么不好。 不幸的是,我不知道这种做法的任何名称或行话。 因此,我将尝试描述它,并要求您告诉我它是如何调用的,并且可能会向我推荐一篇关于该主题的好文章。
假设我们有一些枚举:
public enum Day
{
SUNDAY, MONDAY, ...
}
接下来,假设服务器端程序员每天都附加一个数字id。
当然,正确的做法是使用Day
将每个Integer
映射到EnumMap
,getId()
仅在服务器端代码中定义和使用。
相反,他弄乱了常用代码并添加了public enum Day
{
SUNDAY {public int getId() {return 100;}},
MONDAY {public int getId() {return 101;}},
...;
public abstract int getId();
}
方法:
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();
}
接下来,GUI程序员想要每天附加一个字符串,所以他添加了自己的东西:
{{1}}
你明白了......
你怎么称呼这个东西? 知道任何关于它的好文章吗?
答案 0 :(得分:7)
我不明白为什么这是坏事,除了它比它应该更冗长。您可以将其替换为:
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()
更好的做法,因为你的枚举中的定义顺序变得很重要,并且要求索引是顺序的。