[!quote] 枚举 枚举 是一个特殊的类,表示一组常量【
一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,东南西北方向 ……】,每个枚举常量都是枚举类的一个实例
- 枚举可以用于内部类
- 所有的枚举常量都是
public,static,final的- 枚举类可以有构造函数,但是只能是
private【不加修饰符,默认也是】private- 枚举隐式继承了 Enum 类,所以不能继承任何类
[!hint] 枚举常量在 Java 中是单例的,所以可以用
==来判断枚举是否相等javaif (filterParam.getMiddleFilterParam() == FilterParam.MiddleFilterParam.INTERCEPT)
[!hint] 枚举提供一组预定义的选项,增加了代码的可读性和维护性,因为它们可以清晰地表达程序员的意图 比如用户的状态,在数据库表中表示为
0,1,但是你如果在代码中写数字表示状态,可读性就会很差,所以我们可以使用枚举
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
BLUEordinal()可以找到每个枚举常量的索引,就像数组索引一样
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
2valueOf(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]