Java枚举类浅析
@(Java)
Enum是enumeration(列举)的简写形式,包含在java.lang包中。能使代码有更好的阅读性和安全性。
1.实例
直接上实例:
package com.enums.test;
public enum Color {
RED("红", 101),
YELLOR("黄", 102),
BLUE("蓝", 103),
GREEN("绿", 104);
private String desc;
private Integer num;
private Color(String desc, Integer num) {
this.desc = desc;
this.num = num;
}
public static Color getEnum(Integer num) {
for (Color color : Color.values()) {
if (num == color.num)
return color;
}
return null;
}
public static String getEnumDesc(Integer num) {
for (Color color : Color.values()) {
if (num.equals(color.num))
return color.desc;
}
return null;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
}
2.java.lang.enum api
2.1 ordinal
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。被设计用于复杂的基于枚举的数据结构,比如 EnumSet 和 EnumMap。
public static void main(String[] args) {
//打印出0
System.out.println(Color.RED.ordinal());
//打印出2
System.out.println(Color.BLUE.ordinal());
}
2.2 getDeclaringClass
返回与此枚举常量的枚举类型相对应的 Class 对象。当且仅当 e1.getDeclaringClass() == e2.getDeclaringClass() 时,两个枚举常量 e1 和 e2 的枚举类型才相同。(由该方法返回的值不同于由 Object.getClass() 方法返回的值, Object.getClass() 方法用于带有特定常量的类主体的枚举常量。)
public enum Size {
//如果枚举类没有这种特殊的自定义class方法的话,getClass与getDeclaringClass将会返回相同的东西
BIG{
void desc(){
System.out.println("Big");
}
},
SMALL{
void desc(){
System.out.println("Small");
}
}
}
public static void main(String[] args) {
//false
System.out.println(Size.BIG.getClass() == Size.SMALL.getClass());
//true
System.out.println(Size.BIG.getDeclaringClass() == Size.SMALL.getDeclaringClass());
}
2.3 compareTo
比较此枚举与指定对象的顺序。在该对象小于、等于或大于指定对象时,分别返回负整数、零或正整数。 枚举常量只能与相同枚举类型的其他枚举常量进行比较。该方法实现的自然顺序就是声明常量的顺序。
public static void main(String[] args) {
//-1
System.out.println(Color.BLUE.compareTo(Color.GREEN));
//1
System.out.println(Color.BLUE.compareTo(Color.YELLOR));
//2
System.out.println(Color.BLUE.compareTo(Color.RED));
//0
System.out.println(Color.BLUE.compareTo(Color.BLUE));
}
2.4 valueOf
返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。(不允许使用额外的空白字符。)
public static void main(String[] args) {
Color color = Color.valueOf(Color.class, "RED");
System.out.println(color.name());
}
3.枚举类的switch使用
//这样就限定了参数必须为Color枚举类,保证了安全性
public static String getColorDesc(Color color){
String colorDesc = "";
switch (color) {
case RED:
colorDesc = "红色";
break;
case BLUE:
colorDesc = "蓝色";
break;
case YELLOR:
colorDesc = "黄色";
break;
case GREEN:
colorDesc = "绿色";
break;
default:
colorDesc = "";
break;
}
return colorDesc;
}