zl程序教程

您现在的位置是:首页 >  其他

当前栏目

枚举类的用法讲解

2023-04-18 14:07:59 时间

本文为博主原创,未经允许不得转载

       在应用中,需要配置很多常量类的属性,在业务应用中获取同一类常量属性的时候,有很多中方法,

一种是将常量类属性放在properties文件当中,在加载的时候进行加载,获取时可以一个一个获取,也可以同时

获取到一个集合,还有一种是将同一类的属性放在枚举类中,在后台业务中进行操作时,会更加的方便快捷。

       枚举类的关键字为enum,以下为一个枚举类:

package com.test;
//所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。 
//enum这个关键字,可以理解为跟class差不多,这也个单独的类。
//可以看到,上面的例子里面有属性,有构造方法,有getter,也可以有setter,
//但是一般都是构造传参数。还有其他自定义方法。那么在这些东西前面的,以逗号隔开的,最后以分号结尾的,
//这部分叫做,这个枚举的实例。也可以理解为,class  new 出来的实例对象。这下就好理解了。
//只是,class,new对象,可以自己随便new,想几个就几个,而这个enum关键字,他就不行,他的实例对象,
//只能在这个enum里面体现。也就是说,他对应的实例是有限的。这也就是枚举的好处了,限制了某些东西的范围,
//举个栗子:一年四季,只能有春夏秋冬,你要是字符串表示的话,那就海了去了,但是,要用枚举类型的话,
//你在enum的大括号里面把所有的选项,全列出来,那么这个季节的属性,对应的值,只能在里面挑。不能有其他的。
public enum Color { // 如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。 RED("红色", 1),GREEN("绿色", 2),BLANK("白色", 3),YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 ,强制私有!!! // 枚举类型对象之间的值比较,是可以使用==,直接来比较值,是否相等的,不是必须使用equals方法的哟。 private Color(String name, int index) { this.name = name; this.index = index; } // 用法三:向枚举中添加新方法 public static String getName(int index) { for (Color c : Color.values()) { if (c.getIndex() == index) { return c.name; } } return null; } // get set 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }

当枚举类中含有抽象方法的时候,每一个枚举的对象都需要实现抽象方法,因为枚举类不能继承其他类,也不能被其他类继承。
有抽象方法的类必然是抽象类,抽象类就需要子类继承它然后实现它的抽象方法,但是呢,枚举类不能被继承,所以需要每一个枚举

的对象都实现抽象方法。
代码如下:

package com.test;

public enum Color 
{
 // 如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。
    RED("红色", 1) {
        @Override
        public String getType()
        {
            // TODO Auto-generated method stub
            return "红色";
        }
    },GREEN("绿色", 2) {
        @Override
        public String getType()
        {
            // TODO Auto-generated method stub
            return "绿色";
        }
    },BLANK("白色", 3) {
        @Override
        public String getType()
        {
            // TODO Auto-generated method stub
            return "白色";
        }
    },YELLO("黄色", 4) {
        @Override
        public String getType()
        {
            // TODO Auto-generated method stub
            return "白色";
        }
    };
    // 成员变量
    private String name;
    
    private int index;
    
    // 构造方法 ,强制私有!!!
    // 枚举类型对象之间的值比较,是可以使用==,直接来比较值,是否相等的,不是必须使用equals方法的哟。
    private Color(String name, int index)
    {
        this.name = name;
        this.index = index;
    }

/*
*抽象方法
*/
public abstract String getType(); // get set 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }

枚举要注意的细节:
1. 枚举类也是一个特殊的类。
2. 枚举值默认的修饰符是public static final。
3. 枚举值的数据类型就是枚举值所属的类的类型, 然后枚举值是指向了本类的对象的。
4. 枚举类的构造方法默认的修饰符是private的,私有构造方法后,外界就不能创建该类的对象了。
5. 枚举类可以定义自己的成员变量与成员函数。
6. 枚举类可以自定义构造函数,但是构造函数的修饰符必须是private。
7. 枚举类可以存在抽象 的方法,但是枚举值必须要实现抽象 的方法。
8. 枚举值必须要位置枚举类 的第一个语句。