如何使用?
定义枚举类
// 交易状态
public enum TradeStatus {
// 交易状态: S:成功 , F:失败 , C:被冲正 , U:预记状态 , X:发送失败 , T: 发送超时 , E: 其他错误
SUCCESS("S"), FAIL("F"); //各个不同的枚举值,SUCCESS相当于是调用枚举类的构造器创建了一个实例对象,入参S就是枚举类的数据的值
private final String value; //私有常量。注意:不能是static,因为枚举类需要创建好几个实例对象,每个实例对象的数据的值都不一样。
private TradeStatus(String value) { //构造器私有,因为不能被外界调用
this.value = value;
}
public String getValue(){
return valuel;
}
}
调用枚举类,访问枚举类的某个实例对象的数据
TradeStatus.SUCCESS.getValue();
工作使用
定义枚举类
package order.manager.service.controller.common;
/**
* 风控维度
* @author gzh
* @createTime 2020/5/21 7:10 PM
*/
public enum RiskEnum {
//
CARD("card","银行卡号"),
IP("ip","ip地址"),
CORPORATE_CERTI("corporateCerti","法人证件号"),
ID_NO("idno","法人证件号"),
UNIFIED_SOCIAL_CREDITCODE("unifiedsocialcreditcode","统一社会信用代码"),
PHONE("phone","手机号"),
FINGER_PRINT("fingerprint","设备指纹"),
COMPANY("company","公司全称"),
NAME("name","姓名"),
CUSTOMER_ID("customerid","用户号(登录号)");
//
private final String name;
public String getName() {
return name;
}
// public void setName(String name) {
// this.name = name;
// }
public String getValue() {
return value;
}
// public void setValue(String value) {
// this.value = value;
// }
private final String value;
//
RiskEnum(String name, String value) {
this.name=name;
this.value=value;
}
}
调用枚举类
/**
* 转换为中文名字
*
* @param redInfoStr
* @return
*/
public static List convertName2(String redInfoStr){
log.info("redInfoStr:{}",redInfoStr);
List<RedInfo> redInfoList = new ArrayList<>();
try {
//
com.alibaba.fastjson.JSONArray redInfoArray = new com.alibaba.fastjson.JSONArray();
if (StringUtils.isNotEmpty(redInfoStr)) {
redInfoArray = (com.alibaba.fastjson.JSONArray) com.alibaba.fastjson.JSONObject.parse(redInfoStr);
}
if (redInfoArray != null) {
for (int i = 0; i < redInfoArray.size(); i++) {
com.alibaba.fastjson.JSONObject jsonObject = (com.alibaba.fastjson.JSONObject) redInfoArray.get(i);
RedInfo redInfo = new RedInfo();
redInfo.setName(jsonObject.getString("tag"));
redInfo.setValue(jsonObject.getString("uniqueId"));
redInfoList.add(redInfo);
}
}
//
for (int i = 0; i < redInfoList.size(); i++) {
RedInfo redInfo = (RedInfo) redInfoList.get(i);
String name = (String) redInfo.getName();
if (RiskEnum.CARD.getName().equals(name)) { //访问枚举类的实例对象的数据
redInfo.setName(RiskEnum.CARD.getValue());
} else if (RiskEnum.IP.getName().equals(name)) {
redInfo.setName(RiskEnum.IP.getValue());
} else if (RiskEnum.CORPORATE_CERTI.getName().equals(name)) {
redInfo.setName(RiskEnum.CORPORATE_CERTI.getValue());
} else if (RiskEnum.ID_NO.getName().equals(name)) {
redInfo.setName(RiskEnum.ID_NO.getValue());
} else if (RiskEnum.UNIFIED_SOCIAL_CREDITCODE.getName().equals(name)) {
redInfo.setName(RiskEnum.UNIFIED_SOCIAL_CREDITCODE.getValue());
} else if (RiskEnum.PHONE.getName().equals(name)) {
redInfo.setName(RiskEnum.PHONE.getValue());
} else if (RiskEnum.FINGER_PRINT.getName().equals(name)) {
redInfo.setName(RiskEnum.FINGER_PRINT.getValue());
} else if (RiskEnum.COMPANY.getName().equals(name)) {
redInfo.setName(RiskEnum.COMPANY.getValue());
} else if (RiskEnum.NAME.getName().equals(name)) {
redInfo.setName(RiskEnum.NAME.getValue());
} else if (RiskEnum.CUSTOMER_ID.getName().equals(name)) {
redInfo.setName(RiskEnum.CUSTOMER_ID.getValue());
}
}
} catch (Exception e) {
log.error("转换为中文名字异常",e);
}
log.info("redInfoList:{}", com.alibaba.fastjson.JSONObject.toJSONString(redInfoList));
return redInfoList;
}
主要是访问枚举类的实例对象的数据,比如:
RiskEnum.CARD.getName().equals(name) //访问某个实例对象的name字段
默认继承Enum类,就像所有的类默认继承Object类
申明自定义枚举类的时候,有关键字enum,jdk就知道默认继承Enum类。
应用场景
如果值之间有关系,属于同一业务相关的值,就用枚举
不要用普通类的静态常量,而应该使用枚举,因为一个普通类往往定义了所有的常量,包含了各种业务,很混乱,不好维护。用枚举的话,一目了然,枚举类的作用和每个值一目了然。
而且数据的数据类型也定义好了,不会错。
public enum TradeType {
POSITION_TRADE(0), // 正交易
NEGATIVE_TRADE(1), // 反交易
UNKNOW_TRADE(-1); // 未知交易
private final int value;
private TradeType(String value) {
this.value = value;
}
}
另外,顺便说一下,数据的数据类型,如果可以用基础数据类型,就不要用字符串。比如,如果确定是int就用int,确定是boolean就用boolean,就没有必要全部都用字符串。
如果值之间没有关系,就用普通类
spring boot源码
如果静态常量数据,只有当前类自己使用,那么就直接定义在当前类里面就可以了,没有必要定义在其他单独的类。而且直接用静态常量就可以了,也没有必要用枚举。比如:jdk-BigDecimal
开源框架spring和spring boot
spring,按哪种方式注入bean。
spring boot,用哪种缓存类型。