我有一个枚举:
public enum Status{
A("A"),
B("B"),
C("C"),
D("D"),
E("E")
}
A,B,C属于一个类别,D& E属于不同类别。 现在当我得到一个字符串时,我想决定它属于哪个类别。 基本上,
String s;
if s.equals( Status.A.toString()) || s.equals(Status.B.toString()) || s.equals( Status.C.toString())
return 1;
else return 2;
现在,这可以通过5个字母来管理。如果我有26个字母,if条件的数量将无法管理。有没有更好的方法来写这个?
答案 0 :(得分:5)
不是在代码中决定类别,而是将其存储在enum
本身。您不仅限于单个存储属性;你可以拥有任意多的人。
将构造函数更改为除字母外的类别,并将其存储在enum
:
public enum Status {
A("A", 1),
B("B", 1),
C("C", 1),
D("D", 2),
E("E", 2);
private String name;
private int category;
public String getName() { return name; }
public int getCategory() { return category; }
Status(String name, int category) {
this.name = name;
this.category = category;
}
}
现在很清楚哪个枚举属于哪个类别,因为类别是以声明方式而非算法方式分配的。
答案 1 :(得分:2)
如何维护每个类别的枚举列表,然后将您的字符串与类别列表中的枚举进行比较?请参阅以下示例。
List<Status> category1 = new ArrayList<Status>();
category1.add(Status.A);
category1.add(Status.B);
category1.add(Status.C);
List<Status> category2 = new ArrayList<Status>();
category2.add(Status.D);
category2.add(Status.E);
for(Status e : category1) {
if(s.equals(e.toString()))
return true;
}
for(Status e : category2) {
if(s.equals(e.toString()))
return true;
}
return false;