Java 枚举
一、定义
enum Week{ Mon,Tue,Wen,Thu,Fri,Sat,Sun }
enum实际上是继承自java.lang.Enum的子类
枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal)
构造函数中
上面的Week一共调用了7次这个构造函数。
二、拓展
我们可以把enum看作是普通的类,除了他不能继承其他的类以外,(默认已经继承自Enum了)。
一个简单的例子
enum Week1{ Mon(1),Tue(2),Wen(3),Thu(4),Fri(5),Sat(6),Sun(0); int value; Week1(int value){ this.value=value; } public int getValue() { return value; } }
在enum中我们增加了value,并且重新写了他 的构造函数,初始化他的value值。
事实上上面的enum等价于
class week1{ public static final week1 MON=new week1(1); public static final week1 TUE=new week1(2); public static final week1 WED=new week1(3); public static final week1 THU=new week1(4); public static final week1 FRI=new week1(5); public static final week1 SAT=new week1(6); public static final week1 SUN=new week1(0); private int value; week1(int value){ this.value=value; } public int getValue() { return value; } }
enum的好处就在于可以方便的做相关的常量的定义和处理。
三、相关方法介绍
//values返回整个enum的数组
for(Week w:Week.values()){ System.out.println(w); }
//使用switch非常的方便 Week w=Week.Tue; switch (w) { case Mon: System.out.println("Mon"); break; case Tue: System.out.println(Week.Tue); } //反射获得父类 System.out.println("getDeclaringClass(): " + w.getDeclaringClass().getName()); //name() 和 toString() System.out.println("name(): " + w.name()); System.out.println("toString(): " + w.toString()); //ordinal(), 返回值是从 0 开始 System.out.println("ordinal(): " + w.ordinal());
四:EnumSet和EnumMap
public class Test { public static void main(String[] args) { // EnumSet的使用 EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class); for (EnumTest day : weekSet) { System.out.println(day); } // EnumMap的使用 EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class); weekMap.put(EnumTest.MON, "星期一"); weekMap.put(EnumTest.TUE, "星期二"); // ... ... for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) { Entry<EnumTest, String> entry = iter.next(); System.out.println(entry.getKey().name() + ":" + entry.getValue()); } } }
关于enum最重要的是知道,他的原理,其实就是java通过这样的一个关键字,使得你能够很方便的使用一些常量。
本事上还是class,这个class的结构你也一定要清楚。