枚举和常量的选用

一:枚举反编译后介绍:
原码:

/* Color.java */
public enum Color {

    RED, GREEN, BLUE;

}

为了方便理解,加工反编译后。

public final class Color extends Enum<Color> {

    public static final Color RED;
    public static final Color GREEN;
    public static final Color BLUE;

    // ---------- javac ----------
    private static final Color[] $VALUES;

    public static Color[] values() {
        return $VALUES.clone();
    }
    // ---------------------------

    // ---------- ECJ ----------
    // private static final Color[] ENUM$VALUES;
    //
    // public static Color[] values() {
    //     Color[] copy = new Color[ENUM$VALUES.length];
    //     System.arraycopy(ENUM$VALUES, 0, copy, 0, ENUM$VALUES.length);
    //     return copy;
    // }
    // -------------------------

    public static Color valueOf(String name) {
        return (Color) Enum.valueOf(Color.class, name);
    }

    private Color(String name, int ordinal) {
        super(name, ordinal);
    }

    static {
        RED = new Color("RED", 0);
        GREEN = new Color("GREEN", 0);
        BLUE = new Color("BLUE", 0);
        $VALUES = new Color[3];
        $VALUES[0] = RED;
        $VALUES[1] = GREEN;
        $VALUES[2] = BLUE;
    }

}

结论:枚举类反编译后是个final class,枚举中声明的所有枚举对象,编译时都会变成public static final的常量,编译时会自动添加static代码块,来初始化所有的枚举对象

二:用枚举,什么时候用常量呢。
常量更适用于单一或者单一组合的全局性应用,而枚举更适合多组合多属性关联的复杂情景应用(值比较固定的也适合用枚举,比如每周天数,数,计算符号等比较有特性的且唯一的)。

你可能感兴趣的:(日常为什么)