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)