我有一些像这样的枚举:
public enum Classification {
UNKNOWN("Unknown"),
DELETION("Deletion"),
DUPLICATION("Duplication"), ....
Run Code Online (Sandbox Code Playgroud)
但是其中一些人有20个成员,所以目前我在代码中用巨大的if/else块处理它们,如下所示:
int classification= rs.getInt("classification");
if (classification == Classification.UNKNOWN.ordinal()) {
variant.setClassification(Classification.UNKNOWN);
} else if (classification == Classification.DELETION.ordinal()) {
variant.setClassification(Classification.DELETION);
Run Code Online (Sandbox Code Playgroud)
(rs来自JDBC tho).
Java是否有更好的方法来处理这些大的if/else块来做我正在做的事情?通过它循环的一些排序?
Bal*_*usC 10
您可以使用Enum#values()获取数组中的所有枚举值.序数将1:1映射到数组索引.为Classification枚举添加以下方法:
public static Classification of(int ordinal) {
if (0 <= ordinal && ordinal < values().length) {
return values()[ordinal];
}
throw new IllegalArgumentException("Invalid ordinal " + ordinal);
}
Run Code Online (Sandbox Code Playgroud)
并按如下方式使用它
Classification classification = Classification.of(rs.getInt("classification"));
// ...
Run Code Online (Sandbox Code Playgroud)
但是,使用enum的序数并不是最好的做法.如果某些开发人员重新排列枚举值或添加/删除值,该怎么办?即使是javadoc警告说它通常对开发人员没用.而是给每个枚举值一个固定的标识符.您可以将其作为枚举构造函数参数的附加参数传递.你甚至可以使用枚举的String表示.
UNKNOWN(1, "Unknown"),
DELETION(2, "Deletion"),
DUPLICATION(3, "Duplication"),
// ...
Run Code Online (Sandbox Code Playgroud)
然后使用该值代替DB并修改of()方法以在foreach循环中遍历它们:
public static Classification of(int id) {
for (Classification classification : values()) {
if (classification.id == id) {
return classification;
}
}
throw new IllegalArgumentException("Invalid id " + id);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1812 次 |
| 最近记录: |