Java Enum类型的语法结构尽管和java类的语法不一样,应该说差别比较大。但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>
。
定义一个枚举
定义一个枚举,最简单的方式可能向下面这样
public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE };
枚举的构造函数
枚举可以定义构造函数,但是必须是private
类型。
public enum DishType {
Fish("FISH"), Chiken("CHIKEN"), Meat("MEAT");
private String type;
private DishType(String type) {
this.type = type;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
你可以向上面这样添加private
修饰符或者啥都不添加,但是不能添加public
或protect
。
重写方法
与类一样,可以重写枚举的方法,比如toString()
方法。
public enum DishType {
Fish("FISH"), Chiken("CHIKEN"), Meat("MEAT");
private String type;
private DishType(String type) {
this.type = type;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return type;
}
}
获取枚举值
可以通过.
语法获取枚举值。如果想获取所有的值,可以通过values()
方法
for(DishType dishType:DishType.values()){
System.out.println(dishType);
}
获取原始值
可以通过ordinal()
方法获取枚举的原始值,也就是1
、2
、3
System.out.println(fish.ordinal());
控制台输出0
,因为Fish
是我们在枚举值第一个定义的,从0
开始。
反向获取枚举
可以通过valueOf()
反向获取枚举值
DishType.valueOf("Fish");
枚举中定义方法
比如在枚举中定义一个sayHello
方法
public void sayHello() {
System.out.println("hello,i am " + type);
}
然后调用
DishType fish = DishType.valueOf("Fish");
fish.sayHello();
枚举中的匿名内部类
枚举实例后有花括号时,该枚举实例是枚举类匿名内部之类
定义性别枚举类
package com.company.enumpackage;
public enum Gender {
//枚举值调用对应构造器创建
MALE("男") {
public void info() {
System.out.println("这个枚举代表男");
}
},
FEMALE("女") {
public void info() {
System.out.println("这个枚举代表女");
}
},
UNKNOWN("UNKNOWN");
private final String name;
//枚举类的构造器只能使用private修饰
private Gender(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void info() {
System.out.println("这是第一个用于定义性别的枚举类");
}
}
调用
Gender male = Gender.MALE;
Gender female = Gender.FEMALE;
Gender unKnown = Gender.UNKNOWN;
male.info();
female.info();
unKnown.info();
评论 (0)