枚举详解
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"));
image.png上面代码打印结果如下:
spring name:SUMMER
spring ordinal:1
spring values:["SPRING","SUMMER","AUTUMN","WINTER"]
spring valueOf:SPRING
- Java自动给枚举值按照枚举值出现的顺序,从0开始分配了编号。通过name()可以获得枚举值的名称,通过ordinal()可以获得枚举值的编号。
- 枚举类在经过编译后确实是生成了一个扩展了java.lang.Enum的类
- 枚举类是final的,因此我们无法再继承它了
- 我们定义的每个枚举值都是该类中的一个成员,且成员的类型仍然是Season类型
- 枚举类中被默认增加了许多静态方法,例如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:REDGREEN
blank
3