1. 常量应用
适用于业务行业简单的应用场景,常量的业务含义比较单一,例如描述一年中的四季的枚举类,包含固定的(春季、夏季、秋季、冬季)
代码示例:
package com.yf.billonpig.test.enums;
public enum SeasonEnumV1 {
SPRING,SUMMER,AUTUMN,WINTER;
public static void main(String[] args) {
//输出当前枚举对象本身
System.out.println(SeasonEnumV1.AUTUMN);
//以字符串的形式获取并输出枚举常量
System.out.println(SeasonEnumV1.AUTUMN.toString());
}
}
2. 常量包含其他的业务含义,比如一年四季在保存到数据中时保存的是四季的代号,而不是英文或者是中文描述
代码示例:
package com.yf.billonpig.test.enums;
public enum SeasonEnumV3{
春天(1),夏天(2),秋天(3),冬天(4);
private Integer code;
SeasonEnumV3(){
}
SeasonEnumV3(Integer code){
this.code = code;
}
public Integer getCode() {
return code;
}
public static void main(String[] args) {
//获取枚举常量本身
String name = SeasonEnumV3.冬天.name();
System.out.println(name);
//获取常量本身对应的代码
Integer code = SeasonEnumV3.春天.getCode();
System.out.println(code);
//根据常量名称获取枚举对象
SeasonEnumV3 enumV3 = SeasonEnumV3.valueOf("秋天");
System.out.println(enumV3.getCode());
}
}
3. 常量包含多重语义,例如季节中包含英文描述、时间范围等
代码示例:
package com.yf.billonpig.test.enums;
public enum SeasonEnumV4 {
SPRING("春天",1,"1-3月"),
SUMMER("夏天",2,"4-6月"),
AUTUMN("秋天",3,"7-9月"),
WINTER("冬天",4,"10-12月");
//中文描述
private String chineseName;
//代号
private Integer code;
//时间范围
private String range;
//无参构造
SeasonEnumV4(){
}
//含单个参数构造器
SeasonEnumV4(String chineseName){
this.chineseName = chineseName;
}
//含两个参数构造器
SeasonEnumV4(String chineseName,Integer code){
this(chineseName);
this.code = code;
}
//全参构造器
SeasonEnumV4(String chineseName,Integer code,String range){
this(chineseName,code);
this.range = range;
}
public String getChineseName() {
return chineseName;
}
public Integer getCode() {
return code;
}
public String getRange() {
return range;
}
public static void main(String[] args) {
//获取常量本身
System.out.println(SeasonEnumV4.SUMMER.name());
//获取中文名称
System.out.println(SeasonEnumV4.SUMMER.getChineseName());
//获取代码
System.out.println(SeasonEnumV4.SUMMER.getCode());
//获取时间范围
System.out.println(SeasonEnumV4.SUMMER.getRange());
}
}
4. 新增方法,根据某一语义获取其他语义的属性值
代码示例:
package com.yf.billonpig.test.enums;
public enum SeasonEnumV4{
SPRING("春天",1,"1-3月"),
SUMMER("夏天",2,"4-6月"),
AUTUMN("秋天",3,"7-9月"),
WINTER("冬天",4,"10-12月");
//中文描述
private String chineseName;
//代号
private Integer code;
//时间范围
private String range;
//无参构造
SeasonEnumV4(){
}
//含单个参数构造器
SeasonEnumV4(String chineseName){
this.chineseName = chineseName;
}
//含两个参数构造器
SeasonEnumV4(String chineseName,Integer code){
this(chineseName);
this.code = code;
}
//全参构造器
SeasonEnumV4(String chineseName,Integer code,String range){
this(chineseName,code);
this.range = range;
}
public String getChineseName() {
return chineseName;
}
public Integer getCode() {
return code;
}
public String getRange() {
return range;
}
public static void main(String[] args) {
//根据中文名称获取代码
System.out.println(getCodeByChineseName("冬天"));
}
//根据中文名称获取代码
public static Integer getCodeByChineseName(String chineseName) {
for (SeasonEnumV4 sea:SeasonEnumV4.values()){
if(sea.getChineseName().equals(chineseName)){
return sea.getCode();
}
}
return 0;
}
}
5. 枚举结合接口的应用
代码示例:
注意:接口方法为非静态方法,在调用方法时必须初始化获取到枚举对象才可以调用方法
package com.yf.billonpig.test.enums;
public enum SeasonEnumV4 implements SeasonComm{
//枚举对象初始化
INIT("初始化,无业务含义",0,""),
SPRING("春天",1,"1-3月"),
SUMMER("夏天",2,"4-6月"),
AUTUMN("秋天",3,"7-9月"),
WINTER("冬天",4,"10-12月");
//中文描述
private String chineseName;
//代号
private Integer code;
//时间范围
private String range;
//无参构造
SeasonEnumV4(){
}
//含单个参数构造器
SeasonEnumV4(String chineseName){
this.chineseName = chineseName;
}
//含两个参数构造器
SeasonEnumV4(String chineseName,Integer code){
this(chineseName);
this.code = code;
}
//全参构造器
SeasonEnumV4(String chineseName,Integer code,String range){
this(chineseName,code);
this.range = range;
}
public String getChineseName() {
return chineseName;
}
public Integer getCode() {
return code;
}
public String getRange() {
return range;
}
public static void main(String[] args) {
//根据代码获取中文名称
System.out.println(SeasonEnumV4.INIT.getChineseNameByCode(1));
}
@Override
public String getChineseNameByCode(Integer code) {
for (SeasonEnumV4 sea:SeasonEnumV4.values()){
if(sea.getCode()==code){
return sea.getChineseName();
}
}
return "";
}
}
interface SeasonComm{
String getChineseNameByCode(Integer code);
}
6. 枚举类的方法使用详解
代码示例:
6.1获取枚举类集合
package com.yf.billonpig.test.enums;
public enum SeasonEnumV1 {
SPRING,SUMMER,AUTUMN,WINTER;
public static void main(String[] args) {
//获取枚举类集合
SeasonEnumV1[] values = SeasonEnumV1.values();
for(SeasonEnumV1 sea : values){
System.out.println(sea.name());
}
}
}
6.2根据名称生成枚举对象
package com.yf.billonpig.test.enums;
public enum SeasonEnumV1 {
SPRING,SUMMER,AUTUMN,WINTER;
public static void main(String[] args) {
//获取枚举类集合
for(String sea : "SPRING,SUMMER".split(",")){
SeasonEnumV1 enumV1 = Enum.valueOf(SeasonEnumV1.class, sea);
System.out.println(enumV1);
}
}
}
6.3获取枚举值的排序号ordinal()方法
package com.yf.billonpig.test.enums;
public enum SeasonEnumV1 {
SPRING,SUMMER,AUTUMN,WINTER;
public static void main(String[] args) {
//获取枚举值在枚举类中的排序号
for(SeasonEnumV1 sea : SeasonEnumV1.values()){
System.out.println(sea.ordinal());
}
}
}
6.4获取枚举对象的属性值
package com.yf.billonpig.test.enums;
public enum SeasonEnumV1 {
SPRING,SUMMER,AUTUMN,WINTER;
public static void main(String[] args) {
//获取枚举值在枚举类中的排序号
for(SeasonEnumV1 sea : SeasonEnumV1.values()){
System.out.println(sea.name() instanceof String);
System.out.println(sea.name());
}
}
}
- 静态导入用于enum
使用static import 能够将enum实例的标识符带入到当前的命名空间,所以无需再用enum类型来修饰enum实例,这种用法要根据实际的需求以及代码的复杂程度合理使用
代码示例:
package com.yf.billonpig.test.enums;
//静态导入用于enum
import static com.yf.billonpig.test.enums.SeasonEnumV1.*;
public class Burrito {
//添加枚举类属性
private SeasonEnumV1 seasonEnumV1;
//带参构造方法
public Burrito(SeasonEnumV1 seasonEnumV1){
this.seasonEnumV1 = seasonEnumV1;
}
//重写toString 方法
@Override
public String toString() {
return "Burrito is "+seasonEnumV1;
}
//测试
public static void main(String[] args) {
System.out.println(new Burrito(SPRING));
}
}
- 覆盖enum方法
覆盖enum的toString方法,提供一种为枚举实例生成不同字符串描述信息
代码示例:默认的toString方法输出
package com.yf.billonpig.test.enums;
public enum SeasonEnumV1 {
SPRING,SUMMER,AUTUMN,WINTER;
public static void main(String[] args) {
SeasonEnumV1[] values = SeasonEnumV1.values();
for(SeasonEnumV1 sea : values){
System.out.println(sea.toString());
}
}
}
代码示例:重写toString方法将首字母之后的其他字母变为小写
package com.yf.billonpig.test.enums;
public enum SeasonEnumV1 {
SPRING,SUMMER,AUTUMN,WINTER;
public static void main(String[] args) {
SeasonEnumV1[] values = SeasonEnumV1.values();
for(SeasonEnumV1 sea : values){
System.out.println(sea);
}
}
@Override
public String toString() {
//获取枚举值的名称
String name = name();
//将首字母之后的字母变成小写
String lowerCase = name.substring(1).toLowerCase();
//拼接返回值
return name.charAt(0)+lowerCase;
}
}