枚举


#Java 笔记


枚举的名字就是枚举自己

public class EnumDemo {

    public enum StatusEnum {
        INIT,
        SUCCESS,
        FAIL,
        ;
    }

    public static void main(String[] args) {
        System.out.println(StatusEnum.SUCCESS);
        System.out.println(StatusEnum.SUCCESS.toString());
        System.out.println(StatusEnum.SUCCESS.name());
    }

}

运行后输出:

SUCCESS
SUCCESS
SUCCESS

使用 valueOf 将字符串转换为枚举

public class EnumDemo {

    public enum StatusEnum {
        INIT,
        SUCCESS,
        FAIL,
        ;
    }

    public static void main(String[] args) {
        StatusEnum statusEnum = StatusEnum.valueOf("SUCCESS");
        System.out.println(statusEnum);
    }

}

运行后输出:

SUCCESS

如果根据字符串找不到对应的枚举,会抛出 java.lang.IllegalArgumentException 异常。

使用 values() 遍历枚举

public class EnumDemo {

    public enum StatusEnum {
        INIT,
        SUCCESS,
        FAIL,
        ;
    }

    public static void main(String[] args) {
        for (StatusEnum status: StatusEnum.values()) {
            System.out.println(status);
        }
    }

}

运行后输出:

INIT
SUCCESS
FAIL

使用 ordinal() 获取枚举序号

每个枚举都有一个 int 类型的序号,使用 ordinal() 可以获取。

示例:

public class EnumDemo {

    public enum StatusEnum {
        INIT,
        SUCCESS,
        FAIL,
        ;
    }

    public static void main(String[] args) {
        for (StatusEnum status: StatusEnum.values()) {
            System.out.printf("%s:%s\n", status.name(), status.ordinal());
        }
    }

}

运行后输出:

INIT:0
SUCCESS:1
FAIL:2

枚举可以实现接口

示例:

public class EnumDemo {

    // 接口
    public interface BaseEnum {
        String getName();
    }

    // 枚举实现接口
    public enum StatusEnum implements BaseEnum {
        INIT,
        SUCCESS,
        FAIL,
        ;

        @Override
        public String getName() {
            return name();
        }
    }

    public static void main(String[] args) {
        System.out.println(StatusEnum.SUCCESS.getName());
    }

}

运行后输出:

SUCCESS

枚举判等

判断是否相等,用==等于号判断即可。不同类型的枚举之间,不能用等于号判断是否相等。

public class EnumDemo {

    public enum StatusEnum {
        INIT,
        SUCCESS,
        FAIL,
        ;
    }

    public static void main(String[] args) {
        System.out.println( StatusEnum.SUCCESS == StatusEnum.SUCCESS);
        System.out.println( StatusEnum.valueOf("SUCCESS") == StatusEnum.valueOf("SUCCESS") );
        System.out.println( StatusEnum.SUCCESS == StatusEnum.FAIL);
    }

}

运行后输出:

true
true
false

枚举可以自定义属性

示例:

public class EnumDemo {

    public enum StatusEnum {
        INIT(1, "初始化"),
        SUCCESS(2, "成功"),
        FAIL(3, "失败"),
        ;

        private int code;
        private String desc;

        StatusEnum(int code, String desc) {
            this.code = code;
            this.desc = desc;
        }

        public int getCode() {
            return this.code;
        }

        public String getDesc() {
            return this.desc;
        }

        public static StatusEnum getEnumByCode(int code) {
            for (StatusEnum status: StatusEnum.values()) {
                if (status.getCode() == code) {
                    return status;
                }
            }
            return null;
        }

        @Override
        public String toString() {
            return "StatusEnum{" +
                    "code=" + code +
                    ", desc='" + desc + '\'' +
                    '}';
        }
    }

    // main 函数
    public static void main(String[] args) {

        System.out.println( StatusEnum.getEnumByCode(2) );

    }

}

运行后输出:

StatusEnum{code=2, desc='成功'}


( 本文完 )