一个订单有订单状态和支付状态,用数字来表示状态信息(采用枚举类型来对应储存,采用code和message),但是在前端展示一个订单信息时需要看见状态数字对应的信息,也就是枚举中的message,并不需要展示code。
按照以前的思路,我可以采用循环判断的方式,如果传到前端的实体类中状态为存在的code,那么就将相关字段手动改为对应message。这有很大的缺点,如果状态有很多,那么转换起来非常麻烦。
有一种方便的做法,通过反射到枚举对象:
定义一个CodeEnum接口,所有要反射得到message的枚举类都要implements 实现这个接口
public interface CodeEnum {
Integer getCode();
}
枚举类这样写
@Getter
public enum PaymentTypeEnum implements CodeEnum{
PAY_ONLINE(1, "在线支付");
private Integer code;
private String message;
PaymentTypeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}
Enum工具类
public class EnumUtil {
//返回的对象实现CodeEnum接口
public static <T extends CodeEnum> T getByCode(Class<T> enumClass, Integer code) {
for (T each : enumClass.getEnumConstants()) {
if(each.getCode()==code){
return each;
}
}
return null;
}
}
测试,使用方法
PaymentTypeEnum paymentTypeEnum= EnumUtil.getByCode(PaymentTypeEnum.class,1);
String message=paymentTypeEnum.getMessage();