最直接标准的方式是调用枚举类的静态values()方法,它返回按声明顺序排列的新数组,支持for-each和Stream操作,不可重写且不能动态增删值。

在 Java 中,遍历枚举所有常量值最直接、标准的方式是调用枚举类的静态方法 values(),它会返回一个包含所有枚举常量的数组。
使用 values() 方法遍历
每个枚举类型在编译时都会自动生成一个 public static E[] values() 方法(E 是枚举类型),返回按声明顺序排列的常量数组。
- 这是最常用、最推荐的方式,无需额外依赖或反射
- 返回数组是新创建的,修改它不会影响枚举本身
- 适用于 for-each 循环、Stream 处理等所有数组支持的操作
示例:
enum Color {
RED, GREEN, BLUE
}
// 遍历所有值
for (Color c : Color.values()) {
System.out.println(c); // 输出:RED、GREEN、BLUE
}
转成 Stream 进行函数式处理
如果需要过滤、映射或聚合,可将 values() 结果转为 Stream:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
Arrays.stream(Color.values())
.filter(c -> c != Color.RED)
.forEach(System.out::println); // 输出:GREEN、BLUE
注意 values() 的局限性
values() 是编译器生成的,不能被重写,也不能在运行时动态增删枚举值;若需更灵活的元数据管理(如带描述、状态码),建议在枚举中定义字段和构造方法,并配合 values() 使用:
enum HttpStatus {
OK(200, "Success"),
NOT_FOUND(404, "Resource not found");
private final int code;
private final String desc;
HttpStatus(int code, String desc) {
this.code = code;
this.desc = desc;
}
// 可遍历并访问字段
for (HttpStatus s : HttpStatus.values()) {
System.out.printf("%d: %s%n", s.code, s.desc);
}
}
不推荐:用 Class.getEnumConstants()
虽然 MyEnum.class.getEnumConstants() 也能拿到数组,但它返回 Object[],需要强制转型,且在非枚举类上调用会返回 null,易出错。除非在泛型工具方法中做类型擦除适配,否则优先用 values()。

















