• 枚举类的用法讲解


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

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

    一种是将常量类属性放在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. 枚举值必须要位置枚举类 的第一个语句。

  • 相关阅读:
    九宫格小游戏源码分享
    DeviceOne 竟然做出来如此复杂的App
    DeviceOne 让你一见钟情的App快速开发平台
    MySQL初始化
    MySQL的操作
    MySQL
    Library
    Python模块
    Anaconda的使用
    面向对象之成员修饰 特殊成员 methclass
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/8759739.html
Copyright © 2020-2023  润新知