【发布时间】:2014-02-10 23:31:52
【问题描述】:
我觉得我只是错过了一些东西,或者这可能不是枚举的使用。我几乎知道我可以使用枚举来清理这段代码:
int bookTypeId = 1; //dynamic
String bookTypeName;
switch (bookTypeId) {
case 1:
bookTypeName = "Fantasy";
break;
case 2:
bookTypeName = "Horror";
break;
case 3:
bookTypeName = "Action";
break;
default:
bookTypeName = "Error";
}
所以我做到了,我将它存储在另一个类中,它看起来像:
public static enum BookType {
HORROR("Horror"), FANTASY("Fantasy"), ACTION("Action"), ERROR("Error");
private String name;
BookType(String name) {
this.name = name;
}
public String getType() {
return name;
}
}
现在像这样使用它:
switch (bookTypeId) {
case 1:
bookTypeName = MYConstants.BookType.FANTASY.getType();
break;
case 2:
bookTypeName = MYConstants.BookType.HORROR.getType();
break;
case 3:
bookTypeName = MYConstants.BookType.ACTION.getType();
break;
default:
bookTypeName = MYConstants.BookType.ERROR.getType();
}
我想更进一步,清理我的这个 switch 语句的主类(这就是我开始研究枚举的原因,因为现在它似乎在做同样的事情)。
是否可以在枚举内移动此开关/案例?然后以诸如
之类的方式使用枚举bookTypeName = MYConstants.BookType.getType(bookTypeId);
也可以使用 final 声明这个枚举(当我尝试时它目前正在抱怨),或者它已经是 final?
谢谢!
【问题讨论】:
-
您将枚举放在
MYConstants中,而不是独立的,有什么原因吗? -
我认为
Class在这种情况下会更好。 -
@OP 你在这里有几个答案;如果它回答了您的问题,请接受其中之一。