浅析理论:
Java枚举(enum)详解:Java声明枚举类型、枚举(enum)类、EnumMap 与 EnumSet
声明枚举
声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。
任意两个枚举成员不能具有相同的名称,且它的常数值必须在该枚举的基础类型的范围之内,多个枚举成员之间使用逗号分隔。
使用枚举还可以使 switch 语句的可读性更强
Java 中的每一个枚举都继承自 java.lang.Enum 类。当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例,这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。
所有枚举实例都可以调用 Enum 类的方法
浅析案例:
package com.gongxy;
public enum CompanyEnum {
// 因为已经定义了带参数的构造器,所以在列出枚举值时必须传入对应的参数
COMPANY("公司", 1),
OUTSOURCE("外包", 2),
MICRO_ENTERPRISES("小微企业", 3),
SUPER_AGENT("超级经纪人", 4);
private String description;
public int getCode() {
return code;
}
/*
public void setCode(int code) {
this.code = code;
}
public void setDescription(String description) {
description = description;
}
*/
private int code;
public String getDescription() {
return description;
}
// 定义一个带参数的构造器,枚举类的构造器只能使用 private 修饰
private CompanyEnum(String description, int code){
this.description = description;
this.code = code;
}
/*
@Override
public String toString() {
return this.description;
}
*/
}
package com.gongxy;
import java.util.Arrays;
public class EnumTest {
public static void main(String[] args) {
commonMethod();
}
/*
常用方法
int compareTo(E o): 该方法用于与制定枚举对象比较顺序,同一个枚举实例只能与相同类型的枚举实例比较。如果该枚举对象位于指定枚举对象之后,则返回正整数;反之返回负整数;否则返回零;
String name(): 返回此枚举实例的名称,即枚举值 ;
static values(): 返回一个包含全部枚举值的数组,可以用来遍历所有枚举值;
String toString(): 返回枚举值的名称,与 name 方法类似,更常用;
int ordinal(): 返回枚举值在枚举类中的索引值(从0开始),即枚举值在枚举声明中的顺序,这个顺序根据枚举值声明的顺序而定;
static valueOf(): 返回带指定名称的指定枚举类型的枚举常量,
名称必须与在此类型中声明枚举常量所用的标识符完全匹配(不允许使用额外的空白字符)。
这个方法与toString相对应,因此重写 toString() 方法,一定要重写 valueOf() 方法(我们可以重写 toString() 方法,
但不能自己重写 valueOf() 方法,当我们重写 toString() 方法时,valueOf() 方法会自动重写,不用我们理会。);
boolean equals()方法: 比较两个枚举类对象的引用。
*/
static void commonMethod(){
System.out.println(CompanyEnum.COMPANY.getDescription());//公司
System.out.println(CompanyEnum.COMPANY.getCode());//1
System.out.println(CompanyEnum.OUTSOURCE.compareTo(CompanyEnum.COMPANY));//1
System.out.println(CompanyEnum.OUTSOURCE.compareTo(CompanyEnum.OUTSOURCE));//0
System.out.println(CompanyEnum.OUTSOURCE.compareTo(CompanyEnum.SUPER_AGENT));//-2
CompanyEnum[] companyEnums = CompanyEnum.values();
System.out.println(Arrays.toString(companyEnums));//[COMPANY, OUTSOURCE, MICRO_ENTERPRISES, SUPER_AGENT]
System.out.println(CompanyEnum.COMPANY.toString());//COMPANY
System.out.println(CompanyEnum.COMPANY.name());//COMPANY
System.out.println(CompanyEnum.COMPANY.ordinal());//0
CompanyEnum companyEnum = CompanyEnum.valueOf("COMPANY");
System.out.println(companyEnum);//COMPANY[重写toString()返回“公司”]
System.out.println(CompanyEnum.COMPANY.equals("COMPANY"));//false
System.out.println(CompanyEnum.COMPANY.equals(companyEnum));//true
switch(companyEnum){
case COMPANY:
System.out.println(CompanyEnum.COMPANY.getDescription());
break;
case OUTSOURCE:
System.out.println(CompanyEnum.OUTSOURCE.getDescription());
break;
case MICRO_ENTERPRISES:
System.out.println(CompanyEnum.MICRO_ENTERPRISES.getDescription());
break;
case SUPER_AGENT:
System.out.println(CompanyEnum.SUPER_AGENT.getDescription());
break;
}
}
}