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的结构你也一定要清楚。

原文地址:https://www.cnblogs.com/Coder-Pig/p/6611878.html