Java基础系列13: 枚举
本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。
什么是枚举类
用枚举类型定义的枚举变量只能取集合中的某一元素值,且是固定的.
enum weekdays
{ Sun,Mon,Tue,Wed,Thu,Fri,Sat };
可以给上述的这些字符都进行赋值.
枚举类的定义
1,不能继承其他父类,默认继承java.lang.Enum类
2,默认使用final修饰
3,所有实例必须在第一行给出
可以拥有实例,比如上面的sun,mon都是实例,有且仅有这几个实例.
一个例子,使用Color.values()可以获取枚举类的所有实例
enum Color {
//每个颜色都是枚举类的一个实例,并且构造方法要和枚举类的格式相符合。
//如果实例后面有其他内容,实例序列结束时要加分号。
Red("红色", 1), Green("绿色", 2), Blue("蓝色", 3), Yellow("黄色", 4);
String name;
int index;
Color(String name, int index) {
this.name = name;
this.index = index;
}
public void showAllColors() {
//values是Color实例的数组,在通过index和name可以获取对应的值。
for (Color color : Color.values()) {
System.out.println(color.index + ":" + color.name);
}
}
}
调用枚举类的实例可以直接用’类名.实例名’这种方法来使用
枚举类集合
java.util.EnumMap下面的EnumMap的一个例子:
public class 枚举类集合 {
public static void main(String[] args) {
EnumMap<Color, String> map = new EnumMap<Color, String>(Color.class);
map.put(Color.Blue, "Blue");
map.put(Color.Yellow, "Yellow");
map.put(Color.Red, "Red");
System.out.println(map.get(Color.Red));
}
}
枚举类构造实例:
代码来源于:https://how2playlife.com/2019/09/14/14%E6%9E%9A%E4%B8%BE%E7%B1%BB/
定义只有一个参数的枚举类:
enum SeasonType {
// 通过构造函数传递参数并创建实例
SPRING("spring"),
SUMMER("summer"),
AUTUMN("autumn"),
WINTER("winter");
// 定义实例对应的参数
private String msg;
// 必写:通过此构造器给枚举值创建实例
SeasonType(String msg) {
this.msg = msg;
}
// 通过此方法可以获取到对应实例的参数值
public String getMsg() {
return msg;
}
}
如果有两个参数:
public enum Season {
// 通过构造函数传递参数并创建实例
SPRING(1, "spring"),
SUMMER(2, "summer"),
AUTUMN(3, "autumn"),
WINTER(4, "winter");
// 定义实例对应的参数
private Integer key;
private String msg;
// 必写:通过此构造器给枚举值创建实例
Season(Integer key, String msg) {
this.key = key;
this.msg = msg;
}
// 很多情况,我们可能从前端拿到的值是枚举类的 key ,然后就可以通过以下静态方法获取到对应枚举值
public static Season valueofKey(Integer key) {
for (Season season : Season.values()) {
if (season.key.equals(key)) {
return season;
}
}
throw new IllegalArgumentException("No element matches " + key);
}
// 通过此方法可以获取到对应实例的 key 值
public Integer getKey() {
return key;
}
// 通过此方法可以获取到对应实例的 msg 值
public String getMsg() {
return msg;
}
}