枚举的几种使用

枚举是一个特殊的class,这个class相当于final static修饰,不能被继承。他的构造方法强制被私有化,所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类

1. 枚举常量

有默认的构造方法private ColorEnum();

public enum ColorEnum {
    RED,GREEN,YELLOW,BLANK,ORANGE,BLUE;
}

测试

 @Test
    public void ColorTest(){
        for(ColorEnum color:ColorEnum.values()){
            System.out.println(color.ordinal()+"---color----"+color+"--colorName-"+color.name());
        }
    }

结果

0---color----RED--colorName-RED
1---color----GREEN--colorName-GREEN
2---color----YELLOW--colorName-YELLOW
3---color----BLANK--colorName-BLANK
4---color----ORANGE--colorName-ORANGE
5---color----BLUE--colorName-BLUE

2.带一个参数的枚举

public enum SendMailEnum {
    Topickey("主题关键字"),
    Textkey("正文关键字"),
    MessageTag("消息标签"),
    SenderName("发件人名称"),
    SenderMail("发件人邮箱");

    private String code;

    private SendMailEnum(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    /**
     * 根据类型名称 还回类型的枚举实例
     */
    public static SendMailEnum getEnumByCode(String code){
        for(SendMailEnum sendMailEnum : SendMailEnum.values()){
            if(sendMailEnum.getCode().equals(code)){
                return sendMailEnum;
            }
        }
        return null;
    }
}

测试

 @Test
    public void SendMailTest(){
        String code = "主题关键字";
        SendMailEnum enumByCode = SendMailEnum.getEnumByCode(code);
        System.out.println("enum:"+enumByCode+",ordinal:"+enumByCode.ordinal()+
                ",code:"+enumByCode.getCode()+",name:"+enumByCode.name());

        System.out.println("获取SenderMail枚举类型的code:"+SendMailEnum.SenderMail.getCode());
    }

结果

enum:Topickey,ordinal:0,code:主题关键字,name:Topickey
获取SenderMail枚举类型的code:发件人邮箱

3.向枚举中添加新方法

public enum SeasonEunm {
    //每一个枚举变量都是枚举类SeasonEunm的实例化
    //SeasonEunm.SPRING获得的对象相当于new SeasonEunm("春","春困");获得的对象
    SPRING("春","春困"),SUMMER("夏","夏睡"),AUTUMN("秋","秋乏"),WINTER("冬","冬眠");

    //强制私有化的构造方法,因为枚举类默认继承Eunm类,被final static修饰,不能被继承
    //由于被强制private,所以不能使用new去生成枚举对象
    //在SeasonEunm.SPRING获得对象,隐式调用了下面的构造方法
    // 构造方法 ,赋值给成员变量
    private SeasonEunm(String name, String value) {
        this.name = name;
        this.value = value;
    }


    //添加成员变量的原因是,方便够着方法赋值,使用SeasonEunm.SPRING.getName就能获取对应的值
    private String name;
    private String value;


    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }

}

测试

  @Test
    public void SessionTest() {
        //ordinal返回枚举变量的序号
        for(SeasonEunm seasion:SeasonEunm.values()) {
            System.out.println(seasion+",ordinal:"+seasion.ordinal()+",name:"+seasion.name());
            System.out.println("枚举变量值:"+seasion.getName()+",枚举变量值:"+seasion.getValue());
        }
        System.out.println("-----获取SPRING类型的name值------"+SeasonEunm.SPRING.getName());
        System.out.println("-----获取SPRING类型的value值------"+SeasonEunm.SPRING.getValue());
    }

结果

SPRING,ordinal:0,name:SPRING
枚举变量值:春,枚举变量值:春困
SUMMER,ordinal:1,name:SUMMER
枚举变量值:夏,枚举变量值:夏睡
AUTUMN,ordinal:2,name:AUTUMN
枚举变量值:秋,枚举变量值:秋乏
WINTER,ordinal:3,name:WINTER
枚举变量值:冬,枚举变量值:冬眠
-----获取SPRING类型的name值------春
-----获取SPRING类型的value值------春困

Process finished with exit code 0

4.覆盖枚举的方法

public enum RGBEnum {
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
    // 成员变量
    private String name;
    private int index;
    // 构造方法 ,赋值给成员变量
    private RGBEnum(String name, int index) {
        this.name = name;
        this.index = index;
    }

    //覆盖方法 只能使用toString方法来输出枚举变量值
    @Override
    public String toString() {
        return this.index+"_"+this.name;
    }

}

测试

 @Test
    public void RGBEnumTest() {
        for(RGBEnum rgb:RGBEnum.values()) {
            System.out.println(rgb.toString());
        }
    }

结果


1_红色
2_绿色
3_白色
4_黄色

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值