JAVA 枚举类的ordinal用法
假设你有一个枚举类 BusinessType:
public enum BusinessType {TYPE_A,TYPE_B,TYPE_C;
}
1、.ordinal() 返回该枚举常量的序数
在这个例子中:BusinessType.TYPE_A.ordinal() 返回 0
BusinessType.TYPE_B.ordinal() 返回 1
BusinessType.TYPE_C.ordinal() 返回 2
2、values() 返回该枚举类型的所有实例的一个数组
那么你可以使用以下方式根据 ordinal 值获取对应的枚举实例:
BusinessType getTypeByOrdinal(int ordinal) {if (ordinal < 0 || ordinal >= BusinessType.values().length) {throw new IllegalArgumentException("Invalid ordinal value: " + ordinal);}return BusinessType.values()[ordinal];
}
注意事项
- 安全性:直接依赖于 ordinal 值可能会导致问题,特别是在枚举类型的定义发生变化时(如添加、删除或重新排序枚举常量)。这种变化会改变枚举常量的 ordinal 值,可能导致潜在的错误。
- 边界检查:确保在使用 ordinal 值之前进行边界检查,避免数组越界异常。
- 推荐做法:通常情况下,更推荐使用枚举常量的名字或者与之关联的具体值(如通过构造函数初始化的属性)来查找枚举实例,而不是依赖于 ordinal 值。例如,可以通过名称查找枚举实例:
或者如果枚举有特定的属性,可以遍历枚举实例来匹配这些属性值。
通过上述方法,你可以根据 ordinal 值找到具体的枚举值,但请务必注意其潜在的风险并采取相应的预防措施。