Java列舉類,你們用對了嗎?

zhaozhangxiao發表於2022-03-23

Java 列舉是一個特殊的類,一般表示一組常量,比如一年的 4 個季節,一個年的 12 個月份,一個星期的 7 天,方向有東南西北等。

Java 列舉類使用 enum 關鍵字來定義,各個常量使用逗號 , 來分割。

例如定義一個事件級別的列舉類。

package com.suninfo.alert.constant.incident;

import java.util.stream.Stream;

/**
 * 事件級別列舉
 *
 */
public enum AbnormalLevelEnum {

    UNKNOWN(0, "未知"),
    NORMAL(1, "正常"),
    PROMPT(2, "提示"),
    ALARM(3, "警告"),
    SECONDARY(4, "次要"),
    MAIN(5, "主要"),
    SEVERITY(6, "嚴重");

    public Integer getValue() {
        return value;
    }

    private Integer value;
    private String description;

    AbnormalLevelEnum(Integer value, String description) {
        this.value = value;
        this.description = description;
    }
    /*
    *透過數值查詢描述資訊
    */
    public static String getName(Integer value){
        return Stream.of(AbnormalLevelEnum.values())
            .filter(c -> c.value == value)
            .findAny()
            .orElse(null).description;
    }
}

2022-06-14 完善更方便的用法

package com.xiao.test; /**
 * @author zhangxiao
 * @qq 490433117
 * @create_date 2022/6/2 17:02
 */
/**
 * @author zhangxiao
 * @date 2022/6/2 17:02
 */
public class IndexTest {
  public static void main(String[] args) {
  String description1 = StatusEnum.FAIL.getDescription();
  System.out.println(description1);
  String description = StatusEnum.getStatusType(2).getDescription();
  System.out.println(description);
  StatusEnum statusType = StatusEnum.getStatusType(2);
  switch (statusType){
  case BAD:
  System.out.println("bad");
  break;
  case SUCCESS:
  System.out.println("success");
  break;
  case FAIL:
  System.out.println("fail");
  break;
  default:
  System.out.println("default ");
  break;
 }
}
package com.xiao.test;

import lombok.Getter;

import java.util.stream.Stream;

@Getter
public enum StatusEnum {
    SUCCESS(1,"成功"),
    FAIL(2,"失敗"),
    BAD(3,"系統內部錯誤");

    private Integer value;
    private String description;

    StatusEnum(int value, String description) {
        this.value = value;
        this.description = description;
    }

    public static StatusEnum getStatusType(int value){
       return Stream.of(StatusEnum.values()).filter(s->s.getValue().equals(value)).findAny().orElse(null);
    }

}

結果如圖:

Java列舉類,你們用對了嗎?

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章