天天看點

java枚舉工具類(減少每個枚舉中重複的方法)

前言

幾乎每個系統或多或少都會有些枚舉,用來減少寫死。有時儲存資料的時候需要使用下拉框選擇枚舉,如下圖

枚舉值 1->GET, 2->POST, 3->PUT, 4->DELETE,而傳到後端的是value比如選擇GET時,傳到後端儲存的是1這個值,controller接收的就是Integer類型。

java枚舉工具類(減少每個枚舉中重複的方法)

如上圖,後端可定義枚舉類MethodEnum

/**
 * @author meilin.huang
 * @version 1.0
 * @date 2019-03-23 10:49 AM
 */
public enum MethodEnum {

    /**
     * get請求方法
     */
    GET(1, "GET"),

    /**
     * post請求方法
     */
    POST(2, "POST"),

    /**
     * put請求方法
     */
    PUT(3, "PUT"),

    /**
     * delete請求方法
     */
    DELETE(4, "DELETE");
    
    private Integer value;
    private String name;

    MethodEnum(Integer value, String name) {
        this.value = value;
        this.name = name;
    }
}
           

為什麼需要一些枚舉方法

由于前端傳的參數往往都不可控制,比如傳個5過來,明明沒有5對應的method枚舉,但是如果不校驗的話,存入資料庫,就會造成了無用的資料。此時就可以在MethodEnum中添加一個靜态方法來判斷5是否為合理合法的枚舉狀态。

/**
*  判斷枚舉值是否存在
*/
	public static boolean isExist(Integer value) {
        if (value == null) {
            return false;
        }
        for (MethodEnum e : values()) {
            if (value.equals(e.getValue())) {
                return true;
            }
        }
        return false;
    }
           

而controller就需要如下校驗:

MethodEnum.isExist(5);
           

EnumUtils

明顯的幾乎每個枚舉都需要類似的方法,如果每個枚舉都寫這樣的方法就顯得太重複了且備援了。

是以可以定義一個BaseEnum的接口,每個枚舉都去繼承該接口。

/**
 * V:枚舉值類型
 * @author meilin.huang
 * @version 1.0
 * @date 2019-03-22 11:04 AM
 */
public interface BaseEnum {
    /**
     * 擷取枚舉值
     * @returnint
     */
    Integer getValue();

    /**
     * 擷取枚舉名稱
     * @return
     */
    String getName();
}
           

上述的MethodEnum隻要繼承BaseEnum即可

public enum MethodEnum implements BaseEnum
           

之後就可以使用EnumUtils來統一進行判斷,而具體的EnumUtils如下:

/**
 * @author meilin.huang
 * @version 1.0
 * @date 2019-03-22 11:12 AM
 */
public final class EnumUtils {

    /**
     * 判斷枚舉值是否存在于指定枚舉數組中
     * @param enums  枚舉數組
     * @param value  枚舉值
     * @return
     */
    public static boolean isExist(BaseEnum[] enums, Integer value) {
        if (value == null) {
            return false;
        }
        for (BaseEnum e : enums) {
            if (value.equals(e.getValue())) {
                return true;
            }
        }
        return false;
    }

    /**
     * 根據枚舉值擷取其對應的名字
     * @param enums
     * @param value
     * @return
     */
    public static String getNameByValue(BaseEnum[] enums, Integer value) {
        if (value == null) {
            return "";
        }
        for (BaseEnum e : enums) {
            if (value.equals(e.getValue())) {
                return e.getName();
            }
        }
        return "";
    }
}
           

而在Controller層就可以使用如下方式進行判斷:

if (!EnumUtils.isExist(MethodEnum.values(), permission.getMethod())) {
            throw new BusinessRuntimeException("權限method錯誤!");
        }
           

總結

使用枚舉工具類可以友善地解決每個枚舉類中備援的代碼,不必為每個枚舉都寫類似的方法,且也可以統一管理這些枚舉。

有關更多的使用方式可以關注本人小項目,哈哈哈哈~~~~~~

位址如下: https://gitee.com/objs/mayfly