Skip to content

[!quote] 枚举 枚举 是一个特殊的类,表示一组常量【一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,东南西北方向 ……】,每个枚举常量都是枚举类的一个实例 600

  • 枚举可以用于内部类
  • 所有的枚举常量都是 publicstaticfinal
  • 枚举类可以有构造函数,但是只能是 private不加修饰符,默认也是 private
  • 枚举隐式继承了 Enum 类,所以不能继承任何类

[!hint] 枚举常量在 Java 中是单例的,所以可以用 == 来判断枚举是否相等

java
if (filterParam.getMiddleFilterParam() == FilterParam.MiddleFilterParam.INTERCEPT)

[!hint] 枚举提供一组预定义的选项,增加了代码的可读性和维护性,因为它们可以清晰地表达程序员的意图 比如用户的状态,在数据库表中表示为 01,但是你如果在代码中写数字表示状态,可读性就会很差,所以我们可以使用枚举

java
public enum UserStatus {  
	// 预定义出了三个实例
    NORMAL(1, "正常"),  
    LOCKED(2, "锁定"),  
    FREEZE(3, "冻结");  

    private final int status;  
    private final String desc;  
  
    UserStatus(int status, String desc) {  
        this.status = status;  
        this.desc = desc;  
    }  
}

  • name() 返回枚举常量名
  • values() 返回一个数组,内容是枚举类中所有的实例
  • ordinal() 可以找到每个枚举常量的索引,就像数组索引一样
  • Enum valueOf(枚举常量名) 给定参数,返回指定字符串的枚举常量
  • String name() 返回这个枚举实例的名称

  • values() 返回枚举类中所有的值
java
// 定义一个颜色的枚举类
enum Color { 
    RED, GREEN, BLUE; 
} 

// 测试
public static void main(String[] args) {  
	Color c1 = Color.RED;  
	System.out.println(c1);  
	System.out.println("*******");  

	// 遍历
    for (Color myVar : Color.values()) {
      System.out.println(myVar);
    }
}  

---
RED
*******
RED
GREEN
BLUE
  • ordinal() 可以找到每个枚举常量的索引,就像数组索引一样
java
enum Color {  
	RED, GREEN, BLUE;  
}  

public static void main(String[] args) {  
	Color c = Color.RED;  
	Color cc = Color.GREEN;  
	Color ccc = Color.BLUE;  

	System.out.println(c.ordinal());  
	System.out.println(cc.ordinal());  
	System.out.println(ccc.ordinal());  
}

---
0
1
2
  • valueOf(name参数) 给定 name 参数【就是枚举实例的名字】,返回指定字符串的枚举常量
java
enum Color {  
	RED, GREEN, BLUE;  
}  

System.out.println(Color.valueOf("GREEN"));

---
GREEN

❤️ 枚举集合

创建集合

  • EnumSet.noneOf(枚举类class) 返回一个关于枚举类的空集合
  • EnumSet.allOf(枚举类class) 返回一个关于枚举类的所有实例的集合
  • EnumSet.of(枚举实例 ……) 根据传入的参数,返回枚举集合
java
public enum CustomerType {  
    VIP,  
    NORMAL;  
}

EnumSet<CustomerType> emptySet = EnumSet.noneOf(CustomerType.class);
EnumSet<CustomerType> allSet = EnumSet.allOf(CustomerType.class);
EnumSet<CustomerType> vipSet = EnumSet.of(CustomerType.VIP);

System.out.println(emptySet);
System.out.println(allSet);
System.out.println(vipSet);

---
[]
[VIP, NORMAL]
[VIP]