java - 在 Java 中使用枚举作为数组索引

标签 java enums

在阅读 Effective Java 时,我遇到了“使用枚举而不是 int 常量”的建议。在当前的项目中,我正在做类似于以下的事情:

int COL_NAME = 0;
int COL_SURNAME = 1;

table[COL_NAME] = "JONES" 

我将如何使用枚举来实现这一目标?由于我被迫使用接口(interface),我必须使用 int 作为我的索引。上面的例子只是一个例子。我实际上使用的 API 采用 int 作为索引值。

最佳答案

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

在您的情况下,当您想用 enum 值替换 int 常量时,将数组用于非真正类似数组的数据会出现问题。

一个干净的(er) 解决方案类似于 EnumMapenum 值作为键。

您也可以使用 table[COL_NAME.ordinal()]如果你绝对必须。

如果某些 API 强制您传递 int 值,但您可以控制实际值(即您可以传递自己的常量),那么您可以切换到使用 enum 值,并且仅在您的代码与 API 接口(interface)的位置与 enum 进行转换。 enumValue.ordinal()的逆运算是EnumClass.values()[ordinal])。

关于java - 在 Java 中使用枚举作为数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5417454/

相关文章:

java - 在 Google 连接器安装程序中的何处查找文件系统连接器的日志

enums - 如何将字符串转换为枚举?

swift - Swift 有没有办法在不使用 switch 语句的情况下获取关联值?

java - 访问枚举变量的私有(private)成员?

java枚举到arraylist卡片组

MySQL 5 星评级数据类型?

java - spring中application-Context.xml错误

java - 无法在调用 DatePickerDialog Show 时添加窗口异常

java - Maven错误: Plugin's descriptor contains the wrong version

java - 当执行到 Tomcat 的 proxy_pass 时,Nginx 如何将子域添加为参数