枚举类的主要作用是便捷地定义静态常量,替代public static final xxx。
所有的枚举类型都是java.lang.Enum类的子类,java.lang.Enum的类结构如下:
1 | public abstract class Enum<E extends Enum<E>> |
方法列表:
1 | public final String name(); |
枚举类型的一个简单的例子:
1 | enum Week { |
事实上,上面定义了一个类,它只有七个实例,这些实例只能在其他代码之前定义,并以封号结束。
如果需要的话,可以在枚举类型中添加一些构造器、方法和域。不过,枚举类型只能包含私有构造,且构造器只在构造枚举常量的时候被调用。
1 | enum Week { |
name()
方法描述:返回枚举常量名。
1 | enum Week { |
输出结果:
1 | MONDAY |
toString()
方法描述:返回枚举常量名。
1 | enum Week { |
输出结果:
1 | MONDAY |
通过查看源码,可以看到,toString()方法返回的是name属性。
1 | public String toString() { |
valueOf()
1 | public static Enum valueOf(Class enumClass,String name); |
方法描述:返回指定名字、给定类的枚举常量
1 | enum Week { |
输出结果:
1 | FRIDAY |
ordinal()
方法描述:返回枚举常量在enum中声明的位置,位置从0开始计数。
1 | enum Week { |
输出结果:
1 | 3 |
正如这个方法注释中描述的那样,
1 | Most programmers will have no use for this method. |
大多数程序员用不到这个方法,它是为EnumSet和EnumMap这些基于枚举的复杂数据结构设计的。
values()
每个枚举类都有一个静态方法values(),它返回一个包含全部枚举值的数组。
示例:
1 | enum Week { |
输出结果:
1 | 1 2 3 4 5 6 7 |
equals()和==
在比较两个枚举类型的值时,不需要调用equals,可以直接使用“==”。
查看源码,可以知道,Enum类的equals也是直接使用的”==”来比较。
1 | public final boolean equals(Object other) { |