枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数;枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 1~7 天中的一个…类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型;
在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代,而使用 Java 枚举类型 enum 可以更贴近地表示这种常量。
声明枚举
声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。枚举声明的语法如下:
enum-modifiers enum enumname:enum-base {
enum-body,
}
其中,enum-modifiers 表示枚举的修饰符主要包括 public、private 和 internal;enumname 表示声明的枚举名称;enum-base 表示基础类型;enum-body 表示枚举的成员,它是枚举类型的命名常数;
任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔;
如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型是 int。
下面代码定义了一个表示性别的枚举类型 SexEnum 和一个表示颜色的枚举类型 Color。
public enum Gender {
Male, Female;
}
public enum Color {
Red, Blue, Black, Green, Yellow;
}
之后便可以通过枚举类型名直接引用常量,如 Gender.Male、Color.Red。
使用枚举还可以使 switch 语句的可读性更强,例如以下示例代码:
Gender gender = Gender.Male;
switch (gender) {
case Male:
// your code
break;
case Female:
// your code
break;
default:
// your code
}
枚举类
Java 中的每一个枚举都继承自 java.lang.Enum 类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例,这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。
所有枚举实例都可以调用 Enum 类的方法,常用方法如下所示:
| 方法名称 | 描述 |
|---|---|
| values() | 以数组形式返回枚举类型的所有成员 |
| valueOf() | 将普通字符串转换为枚举实例 |
| compareTo() | 比较两个枚举成员在定义时的顺序 |
| ordinal() | 获取枚举成员的索引位置 |
for (int i = 0; i < Color.values().length; i++) {
System.out.println(Color.values()[i]);
}
System.out.println(Color.Red.compareTo(Color.valueOf("Black")));
System.out.println(Color.Green.ordinal());
为枚举添加方法
Java 为枚举类型提供了一些内置的方法,同时枚举常量也可以有自己的方法,此时要注意必须在枚举实例的最后一个成员后添加分号 ; ,而且必须先定义枚举实例。
下面的代码创建了一个枚举类型 ApiResult,而且在该类型中添加了自定义的方法:
public enum ApiResult {
// 枚举实例
SUCCESS(200, "success"),
NOT_FOUND(404, "not found");
// 成员变量
private Integer code;
private String message;
// 构造方法
private ApiResult(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
// 重写父类方法
@Override
public String toString() {
return String.format("code=%d, message=%s", code, message);
}
public static void main(String[] args) {
System.out.println(ApiResult.SUCCESS.toString());
}
}
作者 Github : tojohnonly , 博客 : EnskDeCode
本文深入解析Java枚举的定义、使用及高级特性。从基本语法到枚举成员的声明,再到自定义方法与内置功能,全面阐述枚举如何增强代码的可读性和安全性。
126

被折叠的 条评论
为什么被折叠?



