Java的枚举类型

打印 上一主题 下一主题

主题 916|帖子 916|积分 2748

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

  • 性别:Man(男)、Woman(女)
  • 订单状态:Nonpayment(未付款)、Paid(已付款)、Delivered(已发货)、Checked(已确认收货)
定义枚举类型
  1. public enum UserType {
  2.     // 1.提供枚举类的对象(枚举常量)
  3.     common("普通用户", 0),
  4.     sectionAdmin("板块管理员", 1),
  5.     superAdmin("超级管理员", 2);
  6.     // 2.对象的属性
  7.     private String typeName;
  8.     private Integer typeId;
  9.     // 3.私有化构造器(private 可省略)
  10.     private UserType(String typeName, Integer typeId) {
  11.         this.typeName = typeName;
  12.         this.typeId = typeId;
  13.     }
  14. }
复制代码
介绍枚举类型

如果需要的话,可以在枚举类型中添加一些构造器、方法和域。当然,构造器只是在构造枚举常量的时候被调用。
所有的枚举类型都是 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。
  1. public static void main(String[] args) {
  2.         // [common, sectionAdmin, superAdmin]
  3.     UserType[] userTypes = UserType.values();
  4.     // 返回具有指定名称的枚举常量
  5.     UserType common = UserType.valueOf("common");
  6.     // 返回具有指定名称的指定枚举类型的枚举常量
  7.     UserType common1 = Enum.valueOf(UserType.class, "common");
  8.     // 返回枚举常量的名称 (Enum 类重写了 toString() )
  9.     String name = common.toString();
  10. }
复制代码
枚举类实现接口

情况一:把枚举类当作正常的类,在类中实现接口
情况二:每个枚举常量分别实现接口
  1. public enum UserType implements UserService {
  2.     // 1.提供枚举类的对象
  3.     common("普通用户", 0) {
  4.         @Override
  5.         public void method() {
  6.             
  7.         }
  8.     },
  9.     sectionAdmin("板块管理员", 1) {
  10.         @Override
  11.         public void method() {
  12.             
  13.         }
  14.     },
  15.     superAdmin("超级管理员", 2) {
  16.         @Override
  17.         public void method() {
  18.             
  19.         }
  20.     };
  21.     // 2.对象的属性
  22.     private String typeName;
  23.     private Integer typeId;
  24.     // 3.私有化的构造器
  25.     private UserType(String typeName, Integer typeId) {
  26.         this.typeName = typeName;
  27.         this.typeId = typeId;
  28.     }
  29. }
复制代码
参考资料

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表