在 Java 中对数组索引使用枚举
在阅读《有效的Java》时,我遇到了“使用枚举而不是常量”的建议。在当前的项目中,我正在做类似下面的事情:int
int COL_NAME = 0;
int COL_SURNAME = 1;
table[COL_NAME] = "JONES"
我如何使用枚举来实现此目的?由于我被迫使用的接口,我必须为我的索引使用。上面的例子只是一个例子。我实际上使用的是一个 API,它采用 for 索引值。int
int
在阅读《有效的Java》时,我遇到了“使用枚举而不是常量”的建议。在当前的项目中,我正在做类似下面的事情:int
int COL_NAME = 0;
int COL_SURNAME = 1;
table[COL_NAME] = "JONES"
我如何使用枚举来实现此目的?由于我被迫使用的接口,我必须为我的索引使用。上面的例子只是一个例子。我实际上使用的是一个 API,它采用 for 索引值。int
int
将一个有用的模式与反模式一起应用通常失败;-)
在您的例子中,当您想要用值替换常量时,对不是真正类似数组的数据使用数组会带来问题。int
enum
一个 clean(er) 解决方案类似于 EnumMap
,其中的值是键。enum
或者,如果您绝对必须,可以使用 table[COL_NAME.ordinal()]
。
如果某些 API 强制您传递值,但您可以控制实际值(即,您可以传递自己的常量),则可以切换到在代码中使用值,并仅在代码与 API 接口的位置进行转换。的反向操作是 )。int
enum
enum
enumValue.ordinal()
EnumClass.values()[ordinal]
这听起来像是你试图使用EnumMap。这是一个包装值数组的 Map。
enum Column {
NAME, SURNAME
}
Map<Column, String> table = new EnumMap<Column, String>(Column.class);
table.put(Column.NAME, "JONES");
String name = table.get(Column.NAME);
如果您使用POJO,这将简单得多。
classPerson {
String name;
String surname;
}
Person person = new Person();
person.name = "JONES";
String name = person.name;