模式切换
枚举类型
枚举类型可以取代以往将常量封装在类或接口中的定义方式,此外还提供了安全检查功能,可以避免传入非法参数。枚举类型本质还是以类的形式存在。
使用枚举类型的优势:
- 代码可读性高:相比
int
或String
,枚举更加直观。 - 类型安全:防止传递无效的值。
- 可扩展性强:可以添加方法,支持复杂逻辑。
使用枚举类型设置常量
在平时定义常量类时,通常会在接口中使用 public static final
修饰的常量,如下:
java
public interface Constants {
public static final int RED = 1;
public static final int GREEN = 2;
public static final int BLUE = 3;
}
在枚举类型出现之后,取代了上述定义常量的方式,如下:
java
public enum Color {
RED, GREEN, BLUE;
}
在使用枚举类型时,可以通过 Color.RED
、Color.GREEN
、Color.BLUE
来访问枚举类型的常量。
深入了解枚举类型
枚举类型相较于传统定义常量的方式,除了具有参数类型检查的功能外,还提供了一些其他功能。
当定义一个枚举类型时,每一个枚举类型的成员都可以看做是一个枚举类型的实例,这些枚举类型成员默认被 public
、final
和 static
修饰,不能被修改。
由于枚举类型对象继承自 java.lang.Enum
类,因此该类中一些操作枚举类型的方法都可以应用到枚举类型中。
表 枚举类型的常用方法
values()
方法返回该枚举类型的所有枚举常量数组,可以用于遍历枚举:
java
public enum Color {
RED, GREEN, BLUE;
}
public class EnumDemo {
public static void main(String[] args) {
// 遍历所有枚举值
for (Color color : Color.values()) {
System.out.println(color);
}
}
}
valueOf(String name)
方法根据 字符串 获取对应的枚举常量,如果字符串不存在,会抛出 IllegalArgumentException
:
java
public class EnumDemo {
public static void main(String[] args) {
Color color = Color.valueOf("RED");
System.out.println(color); // 输出 RED
// Color color = Color.valueOf("YELLOW"); // 报错:IllegalArgumentException
}
}
compareTo(Enum<?> e)
方法用于 比较两个枚举常量的顺序,返回它们的 ordinal()
差值:
java
public class EnumDemo {
public static void main(String[] args) {
Color red = Color.RED;
Color green = Color.GREEN;
System.out.println(red.compareTo(green)); // -1
System.out.println(green.compareTo(red)); // 1
}
}
ordinal()
方法返回 枚举常量的索引位置(从 0 开始):
java
public class EnumDemo {
public static void main(String[] args) {
System.out.println(Color.RED.ordinal()); // 0
System.out.println(Color.GREEN.ordinal()); // 1
System.out.println(Color.BLUE.ordinal()); // 2
}
}