gpt4 book ai didi

java - Java 中的枚举循环

转载 作者:行者123 更新时间:2023-12-01 06:28:15 25 4
gpt4 key购买 nike

我有一些像这样的枚举:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com