enum自定义属性和方法(枚举的用法)以及自己真实应用

public class Test {
    public enum Color {
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
        // 成员变量
        private String name;
        private int index;

        // 构造方法
        private Color(String name, int index) {
            this.name = name;
            this.index = index;
        }

        // 覆盖方法
        @Override
        public String toString() {
            return this.index + "_" + this.name;
        }
    }

    public static void main(String[] args) {
        System.out.println(Color.RED.toString());
    }
}

输出结果是 1_红色

原理分析

 enum的语法结构尽管和class的语法不一样,但是经过编译器之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类。该类继承了java.lang.Enum<E> 。EnumTest经过反编译之后可以得到以下内容

public class com.ichezheng.insurance.controller.EnumTest extends java.lang.Enum{

   public static final com.ichezheng.insurance.controller MON;

public static final com.ichezheng.insurance.controller TUE;

public static final com.ichezheng.insurance.controller WED;

}

所以,实际上enum就是一个class,只不过java编译器帮我们帮我们做了语法解析与编译而已

总结

可以把enum看成是一个普通的class,它们都可以定义一些属性和方法,不同之处是:enum不能使用extends 关键字继承其它类,因为enum已经继承了java.lang.enum(java是单一继承)

 

下面是项目中对枚举类的真实应用

需求,项目中调用webservice接口返回数据数据就显示数字例如 1,2,3,在代码中需要根据数字转换成数字对应的汉字

要求如下:

ID

NAME

11

普通门诊

12

特殊门诊

15

急诊抢救死亡

16

急诊留观

17

门诊挂号

18

急诊挂号

19

急诊

21

普通住院

31

家庭病床

81

计划生育门诊

91

计划生育住院

创建枚举类如下:

public enum MClass {

    a("普通门诊",11),//a,b,c这些字母为了区别,调用中不会用到,别重复就好
    b("特殊门诊",12),
    c("急诊抢救死亡",15),
    d("急诊留观",16),
    e("门诊挂号",17),
    f("急诊挂号",18),
    g("急诊",19),
    h("普通住院",21),
    j("家庭病床",31),
    k("计划生育门诊",81),
    l("计划生育住院",91);

    private String  name;
    private int index;

    private MClass(String name, int index){有参构造方法,不可或缺
        this.name = name;
        this.index = index;
    }
    public static String getNameByIndex(int index){//对外方法,根据传入的数字返回数字对应的汉字
        for (MClass t: MClass.values()) {
            if(t.getIndex() == index){
                return t.name;
            }
        }
        return null;
    }
    public String getName() {//get、set方法
        return name;
    }
    public int getIndex() {
        return index;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setIndex(int index) {
        this.index = index;
    }
}

如何调用如下:

@Test
public void test07(){
    System.out.println(MClass.getNameByIndex(11));//输出普通门诊
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值