java中enum 實現接口


為什么會有這篇文章呢?日常生活中遇到了一個問題。聽我慢慢說來

場景

我在組件中封裝了一個BaseResultEnum;用來定義返回的錯誤碼和錯誤信息。

UNKNOWN_EXCEPTION(500, "未知異常,請聯系系統管理員"),

各個業務項目也寫了類似的 枚舉類。但是再返回的時候,必須xxxResultEnum.code,xxxResultEnum.msg 2個參數進行傳遞進來。因為枚舉不能繼承。

實現

有一天忽然發現可以枚舉可以實現接口。上層定義一個統一的接口不就好了

public interface IResultCode {
    /**
     * 返回碼
     *
     * @return Integer
     */
    Integer getCode();

    /**
     * 返回消息
     *
     * @return String
     */
    String getMsg();
}

枚舉類

@Getter
@AllArgsConstructor
public enum BaseResultEnum  implements IResultCode {

    //========================全局結果枚舉==============================//
    /**
     * 未知異常
     */
    UNKNOWN_EXCEPTION(500, "未知異常,請聯系系統管理員"),

    /**
     * 操作成功
     */
    SUCCESS(200, "操作成功"),
    /**
     * 業務異常
     */
    FAILURE(400, "業務異常"),
    /**
     * 服務未找到
     */
    NOT_FOUND(404, "服務未找到");

    //========================具體業務自定義異常==============================//
    // 建議 一個業務模塊固定的編碼100開始:比如:100001、100002;



    /**
     * 狀態碼
     */
    final Integer code;
    /**
     * 消息內容
     */
    final String msg;
}

這樣的話。業務內就自己定義自己項目內的錯誤信息就可以

@Getter
@AllArgsConstructor
public enum LearningResultEnum implements IResultCode {

    /**
     * 學習未找到
     */
    LEARNING_NOT_FOUND(1001, "該學習未找到");
    /**
     * 狀態碼
     */
    final Integer code;
    /**
     * 消息內容
     */
    final String msg;
}

具體使用

throw new LearningException(LearningResultEnum.LEARNING_NOT_FOUND);

// 這里封裝了一下 就可以直接接口當作參數
    public BaseException(IResultCode resultEnum) {
        super(resultEnum.getMsg());
        this.msg = resultEnum.getMsg();
        this.code = resultEnum.getCode();
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM