在阅读有效的Java时,我遇到了“使用枚举而不是int常量”的建议。在当前项目中,我正在执行与以下类似的操作:
int
int COL_NAME = 0; int COL_SURNAME = 1; table[COL_NAME] = "JONES"
我将如何使用枚举来实现此目的?由于必须使用该接口,因此必须int为索引使用。上面的例子只是一个例子。我实际上正在使用一个intfor索引值的API 。
将一种有用的模式与一种反模式一起应用通常会失败;-)
在您的情况下,如果要用值替换int常量,enum则将数组用于非真正的类数组数据会带来问题。
enum
干净(ER)解决方案会是这样一个EnumMap与enum值作为键。
EnumMap
或者,table[COL_NAME.ordinal()]如果绝对必要,可以使用。
table[COL_NAME.ordinal()]
如果某些API强迫您传递int值,但是您可以控制实际值(即可以传递自己的常量),那么您可以切换为enum在代码中使用值,并enum仅在代码接口的地方进行来回转换。使用API。的相反操作enumValue.ordinal()是EnumClass.values()[ordinal])。
enumValue.ordinal()
EnumClass.values()[ordinal]