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

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

枚举类只有一个对象,可以作为单例模式的一种实现方式。

enum 关键字 JDK5.0 及以后才能使用。
枚举类默认继承 java.lang.Enum 类。

创建枚举类

  1. public enum UserType {
  2. // 1.提供枚举类的对象
  3. common("普通用户", 0),
  4. sectionAdmin("板块管理员", 1),
  5. superAdmin("超级管理员", 2);
  6. // 2.对象的属性, 必须用 private final 修饰
  7. private final String typeName;
  8. private final Integer typeId;
  9. // 3.私有化的构造器(默认即为 private)
  10. UserType(String typeName, Integer typeId) {
  11. this.typeName = typeName;
  12. this.typeId = typeId;
  13. }
  14. }

Enum 类的使用

Enum 类有 values() 方法,但是点 values() 会发现找不到这个方法。
这是因为 Java 编译器在编译 Enum 类的时候自动插入一个 static 的 values() 方法。
官方文档中有说明。

  1. @Test
  2. public void TestEnum() {
  3. // [common, sectionAdmin, superAdmin]
  4. UserType[] userTypes = UserType.values();
  5. // 返回具有指定名称的枚举常量
  6. UserType common = UserType.valueOf("common");
  7. // 返回具有指定名称的指定枚举类型的枚举常量
  8. UserType common1 = Enum.valueOf(UserType.class, "common");
  9. // 放回枚举常量的名称 (Enum 类重写了 toString() )
  10. String name = common.toString();
  11. }

枚举类实现接口

情况一:把枚举类当作正常的类,在类中实现接口
情况二:每个枚举常量分别实现接口

  1. public enum UserType implements UserService {
  2. // 1.提供枚举类的对象
  3. common("普通用户", 0) {
  4. @Override
  5. public void method() {
  6. }
  7. },
  8. sectionAdmin("板块管理员", 1) {
  9. @Override
  10. public void method() {
  11. }
  12. },
  13. superAdmin("超级管理员", 2) {
  14. @Override
  15. public void method() {
  16. }
  17. };
  18. // 2.对象的属性, 必须用 private final 修饰
  19. private final String typeName;
  20. private final Integer typeId;
  21. // 3.私有化的构造器(默认即为 private)
  22. UserType(String typeName, Integer typeId) {
  23. this.typeName = typeName;
  24. this.typeId = typeId;
  25. }
  26. }