Java Enum

Enum 类的声明:

public abstract class Enum>
        implements Comparable, Serializable

枚举也是类,一个枚举可以拥有成员变量,成员方法,构造方法。先来看枚举最基本的用法:

enum Type {
    A, B, C, D;
}

创建 enum 时,编译器会自动为我们生成一个继承自 java.lang.Enum 的类,上面的 enum 可以简单看作:

class Type extends Enum {
    public static final Type A;
    public static final Type B;
    ...
}

对于上面的例子,可以把 Type 看作一个类,而把 A,B,C,D 看作类的 Type 的实例

“类”方法和“实例”方法

在 enum 中,我们可以定义类和实例的变量以及方法:

enum Type {
    A, B, C, D;

    static int value;
    public static int getValue() {
        return value;
    }

    String type;
    public String getType() {
        return type;
    }
}

在原有的基础上,添加了类方法和实例方法。把 Type 看做一个类,那么 enum 中静态的域和方法,都可以视作类方法。和调用普通的静态方法一样,这里调用类方法也是通过 Type.getValue() 即可调用,访问类属性也是通过 Type.value 访问

下面的是实例方法,也就是每个实例才能调用的方法。那么实例是什么呢?没错,就是 A,B,C,D。所以调用实例方法,也就是通过 Type.A.getType() 来调用

最后,对于某个实例而言,还可以实现自己的实例方法:

enum Type {
    A {
        public String getType() {
            return "I will not tell you";
        }
    }, B, C, D;

    static int value;
    public static int getValue() {
        return value;
    }

    String type;
    public String getType() {
        return type;
    }
}

这里,A 实例后面的 {…} 就是属于 A 的实例方法,可以通过覆盖原本的方法,实现属于自己的定制
除此之外,还可以添加抽象方法在 enum 中,强制 ABCD 都实现各自的处理逻辑:

enum Type {
    A {
        @Override
        public String getType() {
            return "A";
        }
    }, B {
        @Override
        public String getType() {
            return "B";
        }
    }, C {
        @Override
        public String getType() {
            return "C";
        }
    }, D {
        @Override
        public String getType() {
            return "D";
        }
    };

    public abstract String getType();
}

你可能感兴趣的:(Java Enum)