什么是枚举?能帮我们解决什么问题呢?
枚举有两种方式来实现(日常开发中枚举使用频率较低,了解即可)
继承 Enum 类
更改类修饰符为enum
下面以介绍第二种为例
举个问题栗子:
public static final Integer RED = 0x1;// 红色
public static final Integer GREEN = 0x2;// 绿色
public static final Integer BLUE = 0x3;// 蓝色
public Integer color;// 颜色
@Test
public void test1() {
color = GREEN;
color=2;
System.out.println(color);
}
可以看到颜色定义复杂,以及Color颜色可以随意进行赋值
枚举就可以解决这两个问题
- 定义Color枚举类型
public enum Color {
/**
* 规定颜色为:
* 红绿蓝
* 注:
* 类定义使用enum代替class
* 枚举类不能被实例化,因为构造访问修饰符是private(默认)
* 常量使用大写
* 多个常量使用逗号(,)分割
* 结尾使用分号(;)结尾
*/
RED,GREEN,BLUE;
}
- 使用枚举
public Color colorEnum;
/**
* 为了规定color的颜色种类只能有红绿蓝三种常量。
* 防止随意赋值。
* 一般判断男女,季节等具体信息时使用。
*/
@Test
public void test1() {
colorEnum = Color.RED;
System.out.println("当前颜色:"+colorEnum);
}
//输出结果:当前颜色:RED
2.1 枚举方法的使用(再多方法可以查看Enum来查看具体描述)
System.out.println("当前常量的名称:"+colorEnum.name());
System.out.println("当前常量的序号:"+colorEnum.ordinal());
System.out.println("当前常量转换为String类型:"+colorEnum.toString());
Color[] values = Color.values();//返回一个枚举数组,显示枚举的所有常量
String color = Arrays.toString(values);
System.out.println(color);
/**
* 当前常量的名称:BLUE
* 当前常量的序号:2
* 当前常量转换为String类型:BLUE
* [RED, GREEN, BLUE]
*/
解释下序号:
Java中枚举常量有一个默认值从0开始,序号也可以理解为默认值
序号顺序是在枚举类中定义时的顺序
2.2 集合对枚举的支持
JDK1.5后对于Set和Map而言增加了两个新的子类: EnumSet、EnumMap。
EnumSet使用
这里不建议使用实例化因为EnumSet是一个抽象类如果实例化则需要实现其方法,繁琐。
以下是集合Set的简单使用可以参考官方链接的方法说明:
https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html
@Test
public void test2(){
//将枚举类型填充到EnumSet中,省去实现抽象方法的繁琐。
EnumSet<Color> set=EnumSet.allOf(Color.class);
System.out.println("allOf:"+set);
//将指定枚举类型copy到EnumSet中。
EnumSet<Color> copyOf = EnumSet.copyOf(set);
System.out.println("copyOf:"+copyOf);
//将枚举类型补充
copyOf.remove(Color.RED);//移除指定枚举元素
System.out.println("remove:"+copyOf);
EnumSet<Color> complementOf = EnumSet.complementOf(copyOf);
System.out.println("complementOf:"+complementOf);
}
EnumMap使用
参考链接:
https://docs.oracle.com/javase/8/docs/api/java/util/EnumMap.html
@Test
public void test3() {
// 参数需要传入枚举类
EnumMap<Color, String> map = new EnumMap<>(Color.class);
map.put(Color.RED, "red");
map.put(Color.BLUE, "blue");
map.put(Color.GREEN, "green");
}
End