作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些像这样的枚举:
public enum Classification {
UNKNOWN("Unknown"),
DELETION("Deletion"),
DUPLICATION("Duplication"), ....
但其中一些有大约 20 个成员,因此目前在代码中我使用巨大的 if/else block 来处理它们,如下所示:
int classification= rs.getInt("classification");
if (classification == Classification.UNKNOWN.ordinal()) {
variant.setClassification(Classification.UNKNOWN);
} else if (classification == Classification.DELETION.ordinal()) {
variant.setClassification(Classification.DELETION);
(rs 来自 JDBC)。
Java 有没有更好的方法让这些大的 if/else block 来完成我正在做的事情?某种循环遍历它的排序?
最佳答案
您可以使用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);
}
并按如下方式使用
Classification classification = Classification.of(rs.getInt("classification"));
// ...
但是,为此使用枚举的序数并不是最佳实践。如果某些开发人员重新排列枚举的值或添加/删除值怎么办?甚至是javadoc警告说它通常对开发人员没有用处。而是给每个枚举值一个固定的标识符。您可以将其作为枚举构造函数参数的附加参数传递。您甚至可以使用枚举的 String
表示形式。
UNKNOWN(1, "Unknown"),
DELETION(2, "Deletion"),
DUPLICATION(3, "Duplication"),
// ...
然后将该值用于 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);
}
关于java - Java 中的枚举循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7193510/
我是一名优秀的程序员,十分优秀!