Java的枚举类型

简介: 如果类的对象的数量只有有限个,并且可以确定对象的属性,那么考虑使用枚举类。所有的枚举类型都是 Enum 类的子类。它们继承了这个类的许多方法。

如果类的对象的数量只有有限个,并且可以确定对象的属性,那么考虑使用枚举类。例如:

  • 性别:Man(男)、Woman(女)
  • 订单状态:Nonpayment(未付款)、Paid(已付款)、Delivered(已发货)、Checked(已确认收货)

定义枚举类型

public enum UserType {

    // 1.提供枚举类的对象(枚举常量)
    common("普通用户", 0),
    sectionAdmin("板块管理员", 1),
    superAdmin("超级管理员", 2);

    // 2.对象的属性
    private String typeName;
    private Integer typeId;

    // 3.私有化构造器(private 可省略)
    private UserType(String typeName, Integer typeId) {
        this.typeName = typeName;
        this.typeId = typeId;
    }
}

介绍枚举类型

如果需要的话,可以在枚举类型中添加一些构造器、方法和域。当然,构造器只是在构造枚举常量的时候被调用。

所有的枚举类型都是 Enum 类的子类。它们继承了这个类的许多方法。其中最有用的一个是 toString() 方法,这个方法能够返回枚举常量名。例如,Size.SMALL.toString() 将返回字符串 “SMALL”。

toString() 的逆方法是 valueOf() 静态方法。例如,语句:Size s = Enum.valueOf(Size.class, "SMALL"); 将变量 s 设置成 Size.SMALL。

每个枚举类型都有一个静态的 values() 方法,它将返回一个包含全部枚举值的数组。

ordinal 方法返回 enum 声明中枚举常量的位置,位置从 0 开始计数。例如:Size.SMALL.ordinal() 返回 0。

public static void main(String[] args) {
    // [common, sectionAdmin, superAdmin]
    UserType[] userTypes = UserType.values();

    // 返回具有指定名称的枚举常量
    UserType common = UserType.valueOf("common");

    // 返回具有指定名称的指定枚举类型的枚举常量
    UserType common1 = Enum.valueOf(UserType.class, "common");

    // 返回枚举常量的名称 (Enum 类重写了 toString() )
    String name = common.toString();
}

枚举类实现接口

情况一:把枚举类当作正常的类,在类中实现接口

情况二:每个枚举常量分别实现接口

public enum UserType implements UserService {

    // 1.提供枚举类的对象
    common("普通用户", 0) {
        @Override
        public void method() {
            
        }
    },
    sectionAdmin("板块管理员", 1) {
        @Override
        public void method() {
            
        }
    },
    superAdmin("超级管理员", 2) {
        @Override
        public void method() {
            
        }
    };

    // 2.对象的属性
    private String typeName;
    private Integer typeId;

    // 3.私有化的构造器
    private UserType(String typeName, Integer typeId) {
        this.typeName = typeName;
        this.typeId = typeId;
    }
}

参考资料

《Java核心技术卷一:基础知识》(第10版)第5章:5.6 枚举类

相关文章
|
Java API
Java枚举类型
Java枚举类型
80 0
|
5月前
|
Java
Java中的枚举类型详解
Java中的枚举类型详解
|
5月前
|
Java
Java中的枚举类型详解:应用与最佳实践
Java中的枚举类型详解:应用与最佳实践
|
7月前
|
Java Spring
Java枚举类型与for、Switch语句
Java枚举类型与for、Switch语句
75 0
|
7月前
|
Java Spring
31、学习 Java 中的枚举类型
31、学习 Java 中的枚举类型
133 1
|
7月前
|
Java
Java枚举类型
Java枚举类型
47 0
|
安全 Java
【Java系列】深入解析枚举类型
【Java系列】深入解析枚举类型
99 0
|
Java Spring
第31篇:学习 Java 中的枚举类型
📖 如果一个变量的取值只可能是固定的几个(如:季节),可以考虑使用枚举类型 📖 枚举由一组预定义的常量构成
139 0
第31篇:学习 Java 中的枚举类型
|
存储 Java API
java | 深入理解Java枚举类型(三)
java | 深入理解Java枚举类型(三)
java | 深入理解Java枚举类型(三)
|
安全 Java 编译器
【小家Java】深入理解Java枚举类型(enum)及7种常见的用法(含EnumMap和EnumSet)(上)
【小家Java】深入理解Java枚举类型(enum)及7种常见的用法(含EnumMap和EnumSet)(上)
【小家Java】深入理解Java枚举类型(enum)及7种常见的用法(含EnumMap和EnumSet)(上)