开发中枚举类的使用是狠广泛的,下面是常见的创建类型,仅供参考
1.普通枚举
public enum OrderStatusEnum {
WAIT_STATUS,
OVER_STATUS;
}
2.键值对枚举(含二进制表示方式)
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
public enum UserClassifyEnum {
ALL(1, "全站"),
BRAND(2, "新人");
private int binaryNo;
private String name;
UserClassifyEnum(int binaryNo, String name) {
this.name = name;
this.binaryNo = binaryNo;
}
public String getName() {
return name;
}
public int getBinaryNo() {
return binaryNo;
}
//默认选项
private static final String[] DEFAULT = new String[]{"全站","新人"};
//由List转为二进制表示
public static String transform(List<String> userClassifyList) {
//默认全都不选择
String[] result = new String[]{"0","0","0","0","0"};
if (null == userClassifyList || userClassifyList.isEmpty()) {
return StringUtils.join(result);
}
for (int i = 0; i < DEFAULT.length; i++) {
if (userClassifyList.contains(DEFAULT[i])) {
//如果有选择,则值改为1
result[i] = "1";
}
}
return StringUtils.join(result);
}
//由十进制转为List表示
public static List<String> transformStringToList(String value) {
if (StringUtils.isEmpty(value)) {
return null;
}
List<String> result = new ArrayList<String>();
String binaryValue = Integer.toBinaryString(Integer.parseInt(value));
String temp = new StringBuilder(binaryValue).reverse().toString();
char[] chars = temp.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '1') {
result.add(DEFAULT[i]);
}
}
return result;
}
}
二进制获取值是否选中判定,通过与运算比较
private Boolean checkCardVerify(DataInfo dataInfo) {
Integer userClass = dataInfo.getUserClassify();
int newUser = UserClassifyEnum.NEW_USER.getBinaryNo();
if ((userClass & newUser) == newUser) {
//与运算比较为true,标识选中
}
}
3.键值对枚举,多值(含二进制表示方式)
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
public enum JdValueRangeEnum {
FIRST_STAGE(2, 201, 4999),
SECOND_STAGE(4, 5000, 9999);
private int binaryNo;
private double minValue;
private double maxValue;
JdValueRangeEnum(int binaryNo, double minValue, double maxValue) {
this.binaryNo = binaryNo;
this.minValue = minValue;
this.maxValue = maxValue;
}
public int getBinaryNo() {
return binaryNo;
}
public double getMinValue() {
return minValue;
}
public double getMaxValue() {
return maxValue;
}
//默认的京享值选项
private static final String[] DEFAULT_RANGE_ARR = new String[]{"[201,+)","[201,4999]","[5000,9999]","[10000,19999]","[20000,+)"};
//由List转为二进制表示
public static String transformListToString(List<String> rangeList) {
//默认全都不选择
String[] result = new String[]{"0","0","0","0","0"};
if (null == rangeList || rangeList.isEmpty()) {
return StringUtils.join(result);
}
String rangeStr = StringUtils.join(rangeList,";").replaceAll("\\s+", "");
for (int i = 0; i < DEFAULT_RANGE_ARR.length; i++) {
if (rangeStr.contains(DEFAULT_RANGE_ARR[i])) {
//如果有选择,则值改为1
result[i] = "1";
}
}
return StringUtils.join(result);
}
//由十进制转为List表示
public static List<String> transformStringToList(String value) {
if (StringUtils.isEmpty(value)) {
return null;
}
List<String> result = new ArrayList<String>();
String binaryValue = Integer.toBinaryString(Integer.parseInt(value));
String temp = new StringBuilder(binaryValue).reverse().toString();
char[] chars = temp.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '1') {
result.add(DEFAULT_RANGE_ARR[i]);
}
}
return result;
}
}