Java-枚举(Enum)

1.枚举概述

枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常熟。当一个变量有几种固定可能的取值时,就可以将其定义为枚举类型。

1.1 声明枚举

Java中枚举是一个特殊的类,使用enum关键字来定义,常量之间使用逗号','来分割。
可定义枚举名称、可访问性基础类型和成员等,声明格式如下:

enum-modifiers enum enumname:enum-base {
    enum-body,
}
  1. enum-modifiers 枚举可访问性,包含public,private,internal (同一应用程序集内部(单独的项目,而不是整个解决方案)
  2. enumname 枚举名称
  3. enum-base 枚举的基础类型 (默认为int)
  4. enum-body 枚举的成员(枚举类型的命名常数)

注:任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。

2.枚举类

如1.1所述,Java中的枚举为特殊的类,均继承自java.lang.Enum类。每个枚举类型成员可看作为一个Enum类的实例,默认被final,public,static修饰,使用枚举类型成员时直接使用枚举名称调用成员即可。

枚举实例常调用的Enum类方法如下:
image
一些具体用法:

public class EnumTest {
	public static void main(String[] args){
		System.out.println(SexEnum.valueOf("male").ordinal());
		System.out.println(SexEnum.values()[0].ordinal());
	}
}

enum SexEnum{
	male,female;
}

3.为枚举添加方法

枚举常量可以有自己的方法,此时需注意:
需在枚举实例的最后一个成员后添加分号,且必须先定义枚举实例。

eg.创建WeekDay枚举

enum WeekDay{
	Mon("Monday"),Tue("Tuesday"),Wed("Wednesday"),Thu("Thusday"),
	Fri("Friday"),Sat("Saturday"),Sun("Sunday");

	private String day;

	WeekDay(String day) {
		this.day = day;
	}

	public static String getDay(int i){
		switch(i){
			case 1:
				return WeekDay.Mon.day;
			case 2:
				return WeekDay.Tue.day;
			default:
				System.out.println("Wrong Number!");
				return null;
		}
	}

	//重写了父类的方法
	@Override
	public String toString() {
		return day;
	}
}

注:若枚举类中含抽象方法,则需在枚举类中的每个对象都将其实现

enum SexEnum{
	male{
		public String getSex(){
			return("Male");
		}
	},
	female{
		public String getSex(){
			return("Female");
		}
	};

	public abstract String getSex();
}

4.EnumMap与EnumSet

4.1 EnumMap类

EnumMap 是专门为枚举类型量身定做的 Map 实现。虽然使用其他的 Map(如 HashMap)实现也能完成枚举类型实例到值的映射,但是使用 EnumMap 会更加高效。

定义方法:Map<SexEnum, Integer> map1 = new EnumMap<SexEnum, Integer>(SexEnum.class);

4.2 EnumSet类

EnumSet 是枚举类型的高性能 Set 实现,它要求放入它的枚举常量必须属于同一枚举类型
EnumSet 提供了许多工厂方法以便于初始化,如下所示
image

定义方法:

EnumSet\<SexEnum> set = EnumSet.of(SexEnum.female);
Set\<SexEnum> set1 = EnumSet.complementOf(set);
posted @ 2021-09-17 20:21  rttrti  阅读(371)  评论(0编辑  收藏  举报