一尘不染

在Java中将枚举用于数组索引

java

在阅读有效的Java时,我遇到了“使用枚举而不是int常量”的建议。在当前项目中,我正在执行与以下类似的操作:

int COL_NAME = 0;
int COL_SURNAME = 1;

table[COL_NAME] = "JONES"

我将如何使用枚举来实现此目的?由于必须使用该接口,因此必须int为索引使用。上面的例子只是一个例子。我实际上正在使用一个intfor索引值的API


阅读 282

收藏
2020-12-03

共1个答案

一尘不染

将一种有用的模式与一种反模式一起应用通常会失败;-)

在您的情况下,如果要用值替换int常量,enum则将数组用于非真正的类数组数据会带来问题。

干净(ER)解决方案会是这样一个EnumMapenum值作为键。

或者,table[COL_NAME.ordinal()]如果绝对必要,可以使用。

如果某些API强迫您传递int值,但是您可以控制实际值(即可以传递自己的常量),那么您可以切换为enum在代码中使用值,并enum仅在代码接口的地方进行来回转换。使用API​​。的相反操作enumValue.ordinal()EnumClass.values()[ordinal])。

2020-12-03