有时候enum定义的字段信息需要保存到数据库,但数据库中保存的不是字符串,而是数字。
例如:
public enum Color {
RED, GREEN, YELLOW;
}
用Color.RED.toString(),返回的是字符串“RED”,而我们数据库中保存的是数字类型的:0代表RED,1代表GREEN,2代表YELLOW,
怎么办呢?这时,可以为每个枚举定义一个值,如下:
public enum Color {
RED(0), GREEN(1), YELLOW(2);
private Color(int value) {
this.value = value;
}
private int value;
public int value() {
return value;
}
}
这样,就可以通过Color.RED.value()获取到要保存到数据库中的值。
编译器默认会添加一个如下的方法:
public static Color valueOf(String);
可以自己再写一个通过int参数(从数据库中查询到的)获取枚举的重载方法:
public static Color valueOf(int value) {
switch (value) {
case 0 :
return RED;
case 1 :
return GREEN;
case 2 :
return YELLOW;
default :
return null;
}
}
感觉,这种情况(用Color.RED.value())下用枚举没有用常量方便。