在 Java 中, 枚举, 也称为枚举类型, 其是一种特殊的数据类型, 它使得变量能够称为一组预定义的常量。 其目的是强制编译时类型安全。
因此, 在 Java 中, enum 是保留的关键字。
1. 枚举的定义
在 Java 是在 JDK 1.4 时决定引入的, 其在 JDK 1.5 发布时正式发布的。
举一个简单的例子:以日常生活中的方向来定义, 因为其名称, 方位等都是确定, 一提到大家就都知道。
1.1 传统的非枚举方法
如果不使用枚举, 我们可能会这样子定义
public class Direction {
public static final int EAST = 0;
public static final int WEST = 1;
public static final int SOUTH = 2;
public static final int NORTH = 3;
}
以上的定义也是可以达到定义的, 我们在使用时
@Test
public void testDirection() {
System.out.println(getDirectionName(Direction.EAST));
System.out.println(getDirectionName(5));// 也可以这样调用
}
public String getDirectionName(int type) {
switch (type) {
case Direction.EAST:
return "EAST";
case Direction.WEST:
return "WEST";
case Direction.SOUTH:
return "SOUTH";
case Direction.NORTH:
return "NORTH";
default:
return "UNKNOW";
}
}
运行起来也没问题。 但是, 我们就如同上面第二种调用方式一样, 其实我们的方向就在 4 种范围之内,但在调用的时候传入不是方向的一个 int 类型的数据, 编译器是不会检查出来的。
1.2 枚举方法
我们使用枚举来实现上面的功能
定义
public enum DirectionEnum {
EAST, WEST, NORTH, SOUTH
}
测试
@Test
public void testDirectionEnum() {
System.out.println(getDirectionName(DirectionEnum.EAST));
// System.out.println(getDirectionName(5));// 编译错误
}
public String getDirectionName(DirectionEnum direction) {
switch (direction) {
case EAST:
return "EAST";
case WEST:
return "WEST";
case SOUTH:
return "SOUTH";
case NORTH:
return "NORTH";
default:
return "UNKNOW";
}
}
以上只是一个举的例子, 其实, 枚举中可以很方便的获取自己的名称。
通过使用枚举, 我们可以很方便的限制了传入的参数, 如果传入的参数不是我们指定的类型, 则就发生错误。
1.3 定义总结
以刚刚的代码为例
public enum DirectionEnum {
EAST, WEST, NORTH, SOUTH
}
- 枚举类型的定义跟类一样, 只是需要将 class 替换为 enum
- 枚举名称与类的名称遵循一样的惯例来定义
- 枚举值由于是常量, 一般推荐全部是大写字母
- 多个枚举值之间使用逗号分隔开
- 最好是在编译或设计时就知道值的所有类型, 比如上面的方向, 当然后面也可以增加