枚举其实是个特殊的 Java 类,创建枚举需用enum
关键字,枚举类都是java.lang.Enum
的子类,java.lang.Enum
是一个抽象类,枚举类型符合通用类型模式Class Enum<E extends Enum<E>>
,这里的 E 表示枚举类型的名称,枚举类的每个值都会映射到protected Enum(String name, int ordinal)
构造函数中,每个值(如NumEnum中的ONE)的名称都被转成字符串, ordinal 表示被创建的顺序(默认是0,1,2,3...)。
枚举类enum
定义如下:
enum NumEnum{
ONE,TWO,THREE,FOUR
}
实际上是调用了如下方法:
new Enum<NumEnum>("ONE",0);
new Enum<NumEnum>("TWO",1);
new Enum<NumEnum>("THREE",2);
new Enum<NumEnum>("FOUR",3);
常用方法如下:
//比较此枚举与指定对象的顺序
int compareTo(E o)
//返回与此枚举常量的枚举类型相对应的 Class 对象
Class<E> getDeclaringClass()
//返回此枚举常量的名称
String name()
//返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)
int ordinal()
// 返回枚举常量的名称
String toString()
//返回带指定名称的指定枚举类型的枚举常量
static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
NumEnum
调用常用方法如下:
System.out.println(NumEnum.ONE.compareTo(NumEnum.FOUR));// -3
System.out.println(NumEnum.ONE.getDeclaringClass());//class com.jeeno.test.NumEnum
System.out.println(NumEnum.TWO.name());//TWO
System.out.println(NumEnum.THREE.ordinal());//2
System.out.println(NumEnum.THREE.toString());//THREE
System.out.println(NumEnum.ONE.valueOf("FOUR"));//FOUR
实际上enum
就是一个class
,只不过 Java 编译器帮我们做了语法的解析和编译而已。可以把enum
看成是一个普通的class
,它们都可以定义一些属性和方法,不同之处是:enum
不能使用extends
关键字继承其他类,因为enum
已经继承了java.lang.Enum
(java是单一继承)。
网友评论