java中enum用法及和swtich结合使用

xiaoxiao2021-02-28  112

enum用法

语法(定义)

创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类),此类不能手工进行子类定义。枚举类型符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

简单用法

Enum一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用”==”来替换equals。是一种好的习惯。例如: 性别: public enum SexEnum { MALE,FEMALE; } 本质上 male=0,female=1;但是用这种方式表达比直接用0,1,2,3要形象和富有意义。 这段代码实际上调用了2次 Enum(String name, int ordinal): new Enum<EnumTest>("MALE",0); new Enum<EnumTest>("FEMALE",1);

复杂用法:

上面的是一个最简单的最具有代表的枚举。 public enum Gender{ //通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错 //赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;根据括号中的参数调用响应的构造函数 MALE("MAN"), FEMALE("WOMEN"); private final String value;

//构造器默认也只能是private, 从而保证构造函数只能在内部使用 private Gender(String value) { this.value = value; } public String getValue() { return value; } }

public enum OrderState { /** 已取消 */ CANCEL {public String getName(){return "已取消";}}, /** 待审核 */ WAITCONFIRM {public String getName(){return "待审核";}}, /** 等待付款 */ WAITPAYMENT {public String getName(){return "等待付款";}}, /** 正在配货 */ ADMEASUREPRODUCT {public String getName(){return "正在配货";}}, /** 等待发货 */ WAITDELIVER {public String getName(){return "等待发货";}}, /** 已发货 */ DELIVERED {public String getName(){return "已发货";}}, /** 已收货 */ RECEIVED {public String getName(){return "已收货";}}; public abstract String getName(); }

遍历、switch 等常用操作

对enum进行遍历和switch的操作示例代码: public class Test { public static void main(String[] args) { for (Gender e : Gender.values()) { System.out.println(e.toString()); } Gender test = Gender.TUE; switch (test) { case MALE: System.out.println("男人"); break; case FEMALE: System.out.println("女人"); break; default: System.out.println(test); break; } } } 在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,也支持了String类型。 大家也注意到了case后面不是EnumTest.MON,如果是的话,会编译报错,可以这样理解:case支持默认可以转为int的值,如果添加限定词的话,就代表一个类,如果不添加内部可能按其0,1,2处理,可以看下enum的构造函数new Enum<EnumTest>("MON",0),switch的时候默认查询比较的也是enum中的ordinal值。这个值可以看做是序号,大家可以dubug看下。

查考: http://www.cnblogs.com/hyl8218/p/5088267.html

转载请注明原文地址: https://www.6miu.com/read-37078.html

最新回复(0)