java枚举的使用
本文内容纲要:
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。
例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。
enum的全称为enumeration,是JDK1.5中引入的新特性,存放在java.lang包中,在上面的这种情况下,enum就能派上用场了。枚举类型的用途不仅如此,具体可用场景可看下面的介绍
1、常量
以前我们定义一个常量通常都是使用publicstaticfinal……定义的,如下面:
publicstaticfinalCONSTANT_STR="TEST";
或者使用接口定义的变量,因为接口定义的变量默认都是publicstaticfinal,如下:
/**
*星期的常量接口
*/
publicinterfaceIWeekConstants{
StringMON="Mon";
StringTUE="Tue";
StringWED="Wed";
StringTHU="Thu";
StringFRI="Fri";
StringSAT="Sat";
StringSUN="Sun";
}
有了枚举我们可以使用下面的方式:
publicenumWeekEnum{
MON,TUE,WED,THU,FRI,SAT,SUN;
}
解释:创建枚举类型要使用enum关键字,隐含了所创建的类型都是java.lang.Enum类的子类(java.lang.Enum是一个抽象类)。枚举类型符合通用模式ClassEnum<EextendsEnum<E>>
,而E
表示枚举类型的名称。枚举类型的每一个值都将映射到protectedEnum(Stringname,intordinal)
构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。
上面那段代码声明的enum对象实际上调用了7次Enum(Stringname,intordinal)这个构造函数。(name是常量,上面是MON,TUE等,ordinal是被创建顺序)
newEnum<EnumTest>("MON",0);
newEnum<EnumTest>("TUE",1);
newEnum<EnumTest>("WED",2);
。。。。。。
2、switch
当我们用switch时,一般都是使用int和char,但其实枚举也可以用在switch中,而且可能使用枚举,可以让我们的代码的可读性更强。下面是枚举使用enum的例子
enumColor{
GREEN,YELLOW,RED
}
publicclassTrafficLight{
Colorcolor=Color.RED;
publicvoidchange(){
switch(color){
caseRED:
System.out.println("红色");
break;
caseYELLOW:
System.out.println("黄色");
break;
caseGREEN:
System.out.println("绿色");
break;
}
}
}
3、向枚举中添加新方法+遍历
我们使用常量的时候,我们使用接口的时候是可以有值与之对应的,如上面IWeekConstants接口的MON的值是Mon,但枚举好像没能标示出这种意义。下面我们就讨论该方式的实现和枚举类型的遍历
枚举类型提供了构造函数,我们可以通过构造函数和覆写toString方法来实现。实现代码如下:
packagecom.zcr.test;
enumActionTypeEnum{
//通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错
//赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错
下载(1,"xiazai"),访问(2,"fangwen");
intindex;
Stringname;
privateActionTypeEnum(intindex,Stringname){
this.index=index;
this.name=name;
}
publicintgetIndex()
{
returnindex;
}
publicvoidsetIndex(intindex)
{
this.index=index;
}
publicStringgetName()
{
returnname;
}
publicvoidsetName(Stringname)
{
this.name=name;
}
}
publicclassEnumTest
{
publicstaticvoidmain(String[]args)
{
ActionTypeEnum[]actionTypeEnums=ActionTypeEnum.values();
for(ActionTypeEnumactionTypeEnum:actionTypeEnums){
System.out.println("name="+actionTypeEnum.getName());
System.out.println("index="+actionTypeEnum.getIndex());
System.out.println("oridary="+actionTypeEnum.ordinal());
System.out.println("this="+actionTypeEnum);
System.out.println("下载值:"+actionTypeEnum.valueOf("下载"));
System.out.println("name()方法="+actionTypeEnum.name());
System.out.println("--------------叫我分割线------------------");
}
}
}
运行结果:
name=xiazai
index=1
oridary=0
this=下载
下载值:下载
name()方法=下载
--------------叫我分割线------------------
name=fangwen
index=2
oridary=1
this=访问
下载值:下载
name()方法=访问
--------------叫我分割线------------------
4、总结
可以把enum看成是一个普通的class,它们都可以定义一些属性和方法,不同之处是:enum不能使用extends关键字继承其他类,因为enum已经继承了java.lang.Enum(java是单一继承),但可以继承接口。
致谢:感谢您的阅读!
本文内容总结:
原文链接:https://www.cnblogs.com/0201zcr/p/5104497.html