1. 程式人生 > >列舉型別的使用、通過code獲取列舉型別

列舉型別的使用、通過code獲取列舉型別

♣通過列舉實現狀態、描述的的定義

@Getter
public enum OrderStatusEnum{
NEW(0, "新訂單"),
FINISHED(1, "完結"),
CANCEL(2, "已取消"),
;
private Integer code;
private String message;

OrderStatusEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}

開發過程中,資料庫中存放的是狀態值(0、1…)。一般前端頁面處理時需要根據狀態手動轉換為特定的含義描述。 如果後臺的狀態是通過列舉類維護的話,可以通過狀態(code)獲取對應的列舉,從而獲得描述資訊。

♣列舉工具類,通過Code返回列舉 1.定義列舉類的介面。建立獲取code的方法,用於後續迴圈對比狀態。

/**
* @ClassName CodeEnum
* @Description: 定義列舉型別介面
* @Author lsh
* @Date 2018/10/24 21:31
* @Version
*/
public interface CodeEnum<T> {
    T getCode();
}

2.建立列舉類實現規定的介面

/**
* @ClassName OrderStatusEnum
* @Description: 訂單狀態
* @Author lsh
* @Date 2018/10/11 20:57
* @Version
*/
@Getter
public enum OrderStatusEnum implements CodeEnum{
NEW(0, "新訂單"),
FINISHED(1, "完結"),
CANCEL(2, "已取消"),
;

private Integer code;
private String message;

OrderStatusEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}

3.建立列舉工具類

/**
* @ClassName EnumUtil
* @Description: 列舉工具類,通過Code返回列舉
* T extends CodeEnum 定義泛型的上限
* enumClass.getEnumConstants() 通過反射取出Enum所有常量的屬性值
* @Author lsh
* @Date 2018/10/24 21:38
* @Version
*/
public class EnumUtil {

public static <T extends CodeEnum> T getByCode(Integer code, Class<T> enumClass) {
    //通過反射取出Enum所有常量的屬性值
    for (T each: enumClass.getEnumConstants()) { 
    //利用code進行迴圈比較,獲取對應的列舉
    if (code.equals(each.getCode())) {
    return each;
    }
}
return null;
    }
}

4.在返回前端的model裡面,實現獲取列舉的方法。

/**
* @ClassName ProductInfo
* @Description: 商品
* @Author lsh
* @Date 2018/10/7 13:45
* @Version
*/
@Entity
@Data
public class ProductInfo {

@Id
private String productId;

/** 狀態, 0正常1下架. */
private Integer productStatus;

@JsonIgnore
public ProductStatusEnum getProductStatusEnum() {
    return EnumUtil.getByCode(productStatus, ProductStatusEnum.class);
}
}

5.頁面中獲取方式。

<td>${orderDTO.getOrderStatusEnum().message}</td>