enum(枚举类)的介绍
枚举类再jdk1.5的时候引入的,与常量的定义相似,不过比较常量,枚举类可以给声明的变量提供更大
的取值范围,是一组预定义常量的集合,使用enum关键字这个类,官方建议定义的时候用大写。
(拥有着更灵活的使用方法),在很多源码中也经常用到比如mybatis,springboot里面
原始接口定义常量
public interface IConstants {
String SPRING= "spring";
String SUMMER= "summer";
String Autumn= "autumn";
String WINTER= "winter";
}
1.enum类基本用法
举一个常见的例子,比如春,夏,秋,冬。我们常以一个常量来命名,这时候我们就可以定义一个枚举类,便于管理。
//定义一个枚举类
public enum Season{
SPRING,SUMMER,Autumn,WINTER
}
package com.gudf.community;
//定义一个主类来调用调用上面的枚举类
public class Test {
SeasonEnum seasonEnum;
public Test(SeasonEnum seasonEnum){
this.seasonEnum = seasonEnum;
}
public void say(){
switch (seasonEnum){
case SPRING:
System.out.println("春天天气不错哦!!!");
break;
case SUMMER:
System.out.println("夏天有点热");
break;
case Autumn:
System.out.println("秋天到了很凉爽");
break;
case WINTER:
System.out.println("冬天有点冷");
break;
}
}
public static void main(String[] args) {
//调用夏天的枚举类
Test test = new Test(SeasonEnum.SUMMER);
test.say();
//下面可以照例调用春天,秋天,冬天
}
}
输出:
2.枚举类和常量static的区别
例如上面的例子使用static final也可以来实现
package com.gudf.community;
public class Test {
public static final int SPRING = 1;
public static final int SUMMER = 2;
public static final int Autumn = 3;
public static final int WINTER = 4;
public Test(SeasonEnum seasonEnum){
this.seasonEnum = seasonEnum;
}
public void say(int seasion){
switch (seasion){
case 1:
System.out.println("春天天气不错哦!!!");
break;
case 2:
System.out.println("夏天有点热");
break;
case 3:
System.out.println("秋天到了很凉爽");
break;
case 4:
System.out.println("冬天有点冷");
break;
}
}
public static void main(String[] args) {
//调用夏天的枚举类
Test test = new Test();
test.say(SPRING );
//下面可以照例调用春天,秋天,冬天
}
}
1.static方式的静态类型不安全,我们可以调用的时候传入其他的值,导致错误
例如:
test.say(12312);
2.static 方式的静态变量不支持属性扩展,每一个key对应的一个值,而enum的每一个key可以拥有自己的属性
3.enum类自定义属性
这就是enum比static属性更加便捷的地方了,可以赋予每一个枚举值若干个属性
package com.gudf.community;
public enum SeasonEnum {
SPRING(1,"春天","春天天气不错哦"),
SUMMER(2,"夏天","夏天有点热"),
Autumn(3,"秋天","秋天到了很凉爽"),
WINTER(3,"冬天","冬天有点冷");
private int index;
private String season;
private String value;
SeasonEnum(int i, String season, String value) {
this.index = i;
this.season = season;
this.value = value;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String getSeason() {
return season;
}
public void setSeason(String season) {
this.season = season;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
这次的测试类就跟上面所述的有点变化了!!
package com.gudf.community;
public class Test {
SeasonEnum seasonEnum;
public Test(SeasonEnum seasonEnum){
this.seasonEnum = seasonEnum;
}
public void say(){
switch (seasonEnum){
case SPRING:
System.out.println(seasonEnum.getSeason()+"||"+seasonEnum.getValue());
break;
case SUMMER:
System.out.println(seasonEnum.getSeason()+"||"+seasonEnum.getValue());
break;
case Autumn:
System.out.println(seasonEnum.getSeason()+"||"+seasonEnum.getValue());
break;
case WINTER:
System.out.println(seasonEnum.getSeason()+"||"+seasonEnum.getValue());
break;
}
}
public static void main(String[] args) {
//调用夏天的枚举类
Test test = new Test(SeasonEnum.SUMMER);
test.say();
//下面可以照例调用春天,秋天,冬天
}
}
运行结果:
最后:
枚举这个东西还真的很少用到。总结枚举常使用的情况,当我们要从另一个函数得到一个值,并且这个值在一定范围内的,这个时候我们就可以通过枚举来定义个这个范围。同时也可以做到限制另外一个函数能够传递进来的值只能够是枚举类型里面的元素。
参考网址:
https://www.jianshu.com/p/d2cb1355653c
https://www.cnblogs.com/hyl8218/p/5088287.html