java 枚举类的应用

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());
        }
    }

}

  1. 静态导入用于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));
    }
}

  1. 覆盖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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值