Enum类的介绍和使用

首先,我们总结一下枚举类的好处,再一层层去研究枚举类的用法:

好处1:如果使用static final属性而不使用枚举的话,可能在代码中出现强行去set属性的写法,在这里单独提出来,大家肯定会觉得不会发生这样的问题,现实开发中,是可能出现的,这时候就会报错,如果使用枚举类的话,因为枚举类无法通过外部去set,所以可以杜绝这样的情况。

好处2:static final扩展性较差,枚举的每一个属性我们都可以扩展属性,重写方法等等。

好处3:可以通过switch去判断,代码的简洁性更高

使用:

最最最最简单级:

先简单写一个枚举类,用enum做关键字声明这个类,然后写属性,注意这里要大写,之间用逗号隔开,这里如果后面没有内容,最后面的分号是可以不加的,但是我们统一规范,加上这个分号。

public enum Number {
	ONE,TWO,THREE,FOUR;
}

然后我们写一个测试类

@Test
public void test01() {
	Number one = Number.ONE;
}

这里我们看出,直接枚举类.属性就可以使用,我们这里需要注意一个细节,返回值是一个类,所以我们上面说的所有枚举类的属性都是错误的说法,实际上它是一个类,一个Number类,也就我们在枚举类里面其实是定义了一个又一个的新类。

简单级:

我们得到了一个Number类,我们自然就会去想着,调用一下它的方法:
在这里插入图片描述
一眼看过去,大多数都是我们熟悉的,除了三个方法,name(),ordinal(),compareTo()。我们没有主动定义过他们。感兴趣的可以深究一下源码,这里直接就说结论了。

public void test01() {
		//name就是枚举类里面定义的属性的名称
		System.out.println(Number.ONE.name()); //ONE
		System.out.println(Number.TWO.name()); //TWO
		//ordinal就是枚举类里面对应属性的位置,排在第几位,从0开始
		System.out.println(Number.ONE.ordinal()); // 0
		System.out.println(Number.THREE.ordinal()); //2
		// compareTo 就是用前面的一个枚举的ordinal去减后面的ordinal
		System.out.println(Number.ONE.compareTo(Number.ONE)); // 0 
		System.out.println(Number.ONE.compareTo(Number.THREE)); //-2
		System.out.println(Number.FOUR.compareTo(Number.ONE)); // 3
	}

入门级:

上面我们讲的都是最基本的用法,接下来我们继续研究一下,枚举类的可扩展性。既然我们都知道在枚举类里面,我们其实是定义了一个又一个新的类。类的构造方法有无参和有参,我们只看见了无参,那么可以实现有参构造吗,答案是可以的,这就是枚举的可扩展性之一。一个Number类无法满足我们的需求,有人看不懂大写的单词,有的只会看中文,更有甚者,只认识数字,所以我们需要给他们展示小写的单词,中文和数字。我们来改写一下代码:

public enum Number {
	ONE("one","一",1),
	TWO("two","二",2),
	THREE("three","三",3),
	FOUR("four","四",4);
	
	// 定义示例变量,这个才是Number类里面真正的属性
	private String lowCase;	//小写
	private String chinese; //中文
	private Integer digit; //数字 
	
	//构造函数,这里只能用private修饰
	//注意,这里只能同时存在一种构造函数,因为目前是有参,所以我们得把枚举类,也就是上面的ONE,TWO也改成有参。
	private Number(String lowCase,String chinese,Integer digit) {
		this.lowCase = lowCase;
		this.chinese = chinese;
		this.digit = digit;
	}
	
	//getter/setter
	public String getLowCase() {
		return lowCase;
	}
	public String getChinese() {
		return chinese;
	}
	public Integer getDigit() {
		return digit;
	}
	public void setLowCase(String lowCase) {
		this.lowCase = lowCase;
	}
	public void setChinese(String chinese) {
		this.chinese = chinese;
	}
	public void setDigit(Integer digit) {
		this.digit = digit;
	}
}

这样,我们就得到了一个全新的Number枚举类,它具有扩展的属性。我们再来测试一下它扩展后的属性

public void test02() {
		System.out.println(Number.FOUR.name()); //FOUR 没有变
		System.out.println(Number.FOUR.ordinal());// 3 没有变
		System.out.println(Number.ONE.getLowCase()); // 在构造的时候传的值 one
		System.out.println(Number.TWO.getChinese()); // 二
		System.out.println(Number.THREE.getDigit()); // 3
	}

那么枚举类仅仅只能扩展属性吗?并不是,他还能扩展方法,我们只需要定义一个抽象方法即可:

public enum Number {
	ONE("one","一",1){
		@Override
		public String getNextNumber() {
			return "2";
		}
		},
	TWO("two","二",2) {
		@Override
		public String getNextNumber() {
			return "3";
		}
	},
	THREE("three","三",3) {
		@Override
		public String getNextNumber() {
			// TODO Auto-generated method stub
			return "4";
		}
	},
	FOUR("four","四",4) {
		@Override
		public String getNextNumber() {
			// TODO Auto-generated method stub
			return "5";
		}
	};
	
	// 定义示例变量,这个才是Number类里面真正的属性
	private String lowCase;	//小写
	private String chinese; //中文
	private Integer digit; //数字 
	
	//构造函数,这里只能用private修饰
	//注意,这里只能同时存在一种构造函数,因为目前是有参,所以我们得把枚举类,也就是上面的ONE,TWO也改成有参。
	private Number(String lowCase,String chinese,Integer digit) {
		this.lowCase = lowCase;
		this.chinese = chinese;
		this.digit = digit;
	}
	
	//定义一个抽象方法
	public abstract String getNextNumber();
	
	//getter/setter
	public String getLowCase() {
		return lowCase;
	}
	public String getChinese() {
		return chinese;
	}
	public Integer getDigit() {
		return digit;
	}
	public void setLowCase(String lowCase) {
		this.lowCase = lowCase;
	}
	public void setChinese(String chinese) {
		this.chinese = chinese;
	}
	public void setDigit(Integer digit) {
		this.digit = digit;
	}
}

这里我们就不测试了,感兴趣的小伙伴们自己测一下把。

以上就是本篇文章要介绍的东西,基本可以满足日常工作大部分需求了,如果以后有需要,再来做补充。

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Java 枚举是一种特殊的,它表示一组常量。在 Java 中,枚举类型是通过关键字 `enum` 来定义的。Enum 是所有枚举类型的基,它提供了一些方法来处理枚举类型。 使用枚举类型可以提高代码的可读性和可维护性。枚举类型通常用于表示一组固定的常量,例如颜色、星期几等。 以下是一个简单的示例,演示如何定义和使用枚举类型: ```java enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public class EnumExample { public static void main(String[] args) { DayOfWeek day = DayOfWeek.MONDAY; switch (day) { case MONDAY: System.out.println("Today is Monday"); break; case TUESDAY: System.out.println("Today is Tuesday"); break; case WEDNESDAY: System.out.println("Today is Wednesday"); break; case THURSDAY: System.out.println("Today is Thursday"); break; case FRIDAY: System.out.println("Today is Friday"); break; case SATURDAY: System.out.println("Today is Saturday"); break; case SUNDAY: System.out.println("Today is Sunday"); break; } } } ``` 上面的示例定义了一个枚举类型 `DayOfWeek`,它包含了一周中的每一天。在 `main` 方法中,我们将 `day` 变量初始化为 `DayOfWeek.MONDAY`,然后使用 `switch` 语句根据 `day` 的值输出相应的信息。 枚举类型还可以包含构造函数、方法和字段。下面的示例演示了如何在枚举类型中定义方法和字段: ```java enum Size { SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL"); private String abbreviation; private Size(String abbreviation) { this.abbreviation = abbreviation; } public String getAbbreviation() { return abbreviation; } } public class EnumExample { public static void main(String[] args) { Size size = Size.MEDIUM; System.out.println(size.getAbbreviation()); // 输出 "M" } } ``` 上面的示例定义了一个枚举类型 `Size`,它包含了衣服的尺码。每一个枚举常量都有一个对应的缩写,我们可以通过 `getAbbreviation` 方法获取它的值。在枚举类型中,我们还可以定义构造函数,这里我们使用了带参数的构造函数来初始化字段 `abbreviation`。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值