枚举类的对象是有限而且固定的。
使用enum
关键词定义。
枚举类是一种特殊的类
enum
定义的枚举类默认继承了java.lang.Enum
类, java.lang.Enum
实现了 Comparable, Serializable 两个接口public abstract class Enum<E extends Enum<E>>
implements Comparable<E>, Serializable {
}
public static final
修饰。public enum EnumTest {
GOOD,BAD;
}
class EnumTestObj{
public void judge(EnumTest s){
switch (s){
case GOOD:
System.out.println("very good");
break;
case BAD:
System.out.println("very bad");
break;
}
}
public static void main(String[] args){
for (EnumTest s : EnumTest.values()){
System.out.println(s);
}
EnumTestObj enumTestObj = new EnumTestObj();
enumTestObj.judge(EnumTest.GOOD);
//比较枚举对象顺序
System.out.println(EnumTest.GOOD.compareTo(EnumTest.BAD));
//枚举值的索引值
System.out.println(EnumTest.BAD.ordinal());
}
}
//输出
GOOD
BAD
very good
-1
1
switch表达式可以是任何枚举类型, case表达式可以直接使用枚举值名字。
枚举类可以定义成员变量, 方法和构造器。
枚举类的实例只能是枚举值, 而不是随意通过 new 创建对象
public enum Gender {
MALE("男"),FEMALE("女");
private final String name;
private Gender(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
class GenderTest{
public static void main(String[] args){
Gender gender = Gender.valueOf("MALE");
System.out.println(gender + " 代表 ;" + gender.getName());
}
}
//输出
MALE 代表 ;男
枚举类可以实现一个或多个接口。
interface GenderDesc{
void info();
}
public enum Gender implements GenderDesc {
MALE("男"),FEMALE("女");
//实现接口方法
public void info(){
System.out.println("desc");
}
private final String name;
private Gender(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
如果每个枚举值调用该方法时,要呈现不同的操作,则可以让每个枚举值分别定义。
interface GenderDesc{
void info();
}
public enum Gender implements GenderDesc {
MALE("男"){
@Override
public void info() {
System.out.println("male info");
}
},
FEMALE("女"){
@Override
public void info() {
System.out.println("female info");
}
};
private final String name;
private Gender(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
上面这种方式,{}相当于创建Gender的匿名子类的实例。
枚举类定义抽象方法时,不能使用 abstract 关键字将枚举类定义成抽象类, 因为系统会自动加上 abstract 。
因为枚举类需要显式的创建枚举值,而不是父类,所以每个枚举值必须为抽象方法提供实现。
public enum Operation {
PLUS{
@Override
public int eval(int a, int b) {
return a + b;
}
},
MINUS{
@Override
public int eval(int a, int b) {
return a - b;
}
};
//定义一个抽象方法,
//每个枚举值都提供不同的实现
public abstract int eval(int a, int b);
public static void main(String[] args){
System.out.println(Operation.PLUS.eval(5, 4));
System.out.println(Operation.MINUS.eval(5, 4));
}
}
//输出
9
1
地址: https://blog.csdn.net/yonggang7/article/details/86726534