枚举详解

2020-02-28  本文已影响0人  二狗不是狗

一.实现原理

public enum Season {
    SPRING, SUMMER, AUTUMN, WINTER
}

System.out.println("spring name:" + Season.SUMMER.name());
System.out.println("spring ordinal:" + Season.SUMMER.ordinal());

System.out.println("spring values:" + JSON.toJSONString(Season.values()));
System.out.println("spring valueOf:" + Season.valueOf("SPRING"));

上面代码打印结果如下:
spring name:SUMMER
spring ordinal:1
spring values:["SPRING","SUMMER","AUTUMN","WINTER"]
spring valueOf:SPRING

image.png
  1. Java自动给枚举值按照枚举值出现的顺序,从0开始分配了编号。通过name()可以获得枚举值的名称,通过ordinal()可以获得枚举值的编号。
  2. 枚举类在经过编译后确实是生成了一个扩展了java.lang.Enum的类
  3. 枚举类是final的,因此我们无法再继承它了
  4. 我们定义的每个枚举值都是该类中的一个成员,且成员的类型仍然是Season类型
  5. 枚举类中被默认增加了许多静态方法,例如values()、valueOf()等

二.高阶使用

public enum Color {
    RED("红色", 1),
    GREEN("绿色", 2),
    BLANK("白色", 3),
    YELLO("黄色", 4);

    private String name;
    private int index;

    Color(String name, int index) {
        this.name = name;
        this.index = index;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getIndex() {
        return index;
    }
    public void setIndex(int index) {
        this.index = index;
    }

    public static Color getColor(int index) {
        for (Color color : Color.values()) {
            if (color.getIndex() == index) {
                return color;
            }
        }
        return null;
    }
}
System.out.println("color name:" + Color.RED.name());
System.out.println("color ordinal:" + Color.RED.ordinal());
System.out.println("color values:" + JSON.toJSONString(Color.values()));
System.out.println("color valueOf:" + Color.valueOf("RED"));

System.out.println(Color.getColor(2));
Color.BLANK.setName("blank");
System.out.println(Color.BLANK.getName());
System.out.println(Color.BLANK.getIndex());

输出
color name:RED
color ordinal:0
color values:["RED","GREEN","BLANK","YELLO"]
color valueOf:RED

GREEN
blank
3

上一篇 下一篇

猜你喜欢

热点阅读