如何理解java枚举,看例子
先来看一下不用枚举怎么表示常量:
//常量类 class Num { public static String ONE = "ONE"; public static String TWO = "TWO"; public static String THREE = "THREE"; public static String FOUR = "FOUR"; public static String FIVE = "FIVE"; } //测试类 public class Test{ public static void main(String[] args) { System.out.println(Num.THREE); } }
再来看一下用了枚举怎么表示常量:
//常量类(枚举类) enum Num { ONE,TWO,THREE,FOUR,FIVE } //测试类 public class Test{ public static void main(String[] args) { System.out.println(Num.THREE); } }
当然枚举还能用于 switch
//常量类(枚举类) enum Num { ONE,TWO,THREE,FOUR,FIVE } //测试类 public class Test{ public static void main(String[] args) { Num num = Num.THREE; switch (num) { case ONE: System.out.println(Color.ONE); break; case TWO: System.out.println(Color.TWO); break; case THREE: System.out.println(Color.THREE); break; case FIVE: System.out.println(Color.FIVE); break; } } }
那么问题来了!
枚举的成员是什么数据类型? 看下面的例子:
//常量类(枚举类) enum Num { ONE(1),TWO(2),THREE(3),FOUR(4),FIVE(5); //构造方法(构造方法放在枚举成员的后面) Num (int data){} } //测试类 public class Test{ public static void main(String[] args) { System.out.println(Num.FOUR); } }
通过上面的例子可以看出,枚举侧成员就是一个对象,成员对象的数据,与构造方法相关,每个成员对象的数据结构相同。
这里我们就可以理解Java枚举的一类相同的对象,这些对象内部的数据结构与枚举类的构造方法相关。
接下来进一步验证枚举成员的数据结构是不是与构造方法相关:
//常量类(枚举类) enum Num { ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five"); //构造方法 Num (int data,String str){} } //测试类 public class Test{ public static void main(String[] args) { System.out.println(Num.FOUR); } }
通过上面的例子可以看出,枚举成员的数据结构只与构造方法相关。
那怎么取出枚举成员的数据呢?通过观察▲可以看出枚举类中还没有get和set方法。
//常量类(枚举类) enum Num { ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five"); //构造方法 Num (int data,String str){ this.data=data; this.str=str; } //成员变量 int data; String str; //get方法 int getData(){ return data; } String getStr(){ return str; } } //测试类 public class Test{ public static void main(String[] args) { System.out.println(Num.FOUR.getData()); System.out.println(Num.FOUR.getStr()); } }
通过通过添加枚举类的成员变量和get方法之后成功获取了,成员的数据。
这时再来回看java枚举类,就能发现Java枚举类和普通的类没什么不同,只是枚举成员就像数组对象一样存放,枚举成员的数据结构与构造方法相关。
添加set方法之后就能修改它的值了:
//常量类(枚举类) enum Num { ONE(1, "one"),TWO(2, "two"),THREE(3, "three"),FOUR(4, "four"),FIVE(5, "five"); //构造方法 Num (int data,String str){ this.data=data; this.str=str; } //成员变量 int data; String str; //get方法 int getData(){ return data; } String getStr(){ return str; } //set方法 void setData(int data){ this.data = data; } void setStr(String str){ this.str = str; } } //测试类 public class Test{ public static void main(String[] args) { System.out.println(Num.FOUR.getStr()); Num.FOUR.setStr("四"); System.out.println(Num.FOUR.getStr()); } }
枚举侧常规用法:
//常量类(枚举类) enum Num { ONE(1, "小米"),TWO(2, "华为"),THREE(3, "苹果"),FOUR(4, "菠萝"),FIVE(5, "坦克"); //构造方法 Num (int index,String name){ this.index = index; this.name = name; } //成员变量 int index; String name; //get方法 int getIndex(){ return index; } String getName(){ return name; } //set方法 void setIndex(int index){ this.index = index; } void setName(String name){ this.name = name; } //根据index获取 name static String getNameByIndex(int idx){ for (Num n : Num.values()) { if (n.getIndex() == idx) { return n.name; } } return "没有找到"; } } //测试类 public class Test{ public static void main(String[] args) { System.out.println(Num.getNameByIndex(3)); } }