美文网首页
看了那么多枚举你真的用了吗

看了那么多枚举你真的用了吗

作者: Dapengyou | 来源:发表于2017-05-02 10:17 被阅读144次

    作为一个没毕业的Android小渣渣,经验是有限的,大学期间本着多读书,多看报,多吃零食,多睡觉的宗旨,看了不少书,书上总会有枚举这个概念,书上写一堆,就是说怎么用,用了它怎么好,然而,自己一写项目总是用的很少,应该说系统将它屏蔽了,根本不用(所以还处于渣渣阶段)

    先来说说为什么用的少,不知道同为渣渣的你是不是有这种感觉:自己的内心承认枚举是个好东西,但是觉得写东西时用不到,为什么会用不到?因为项目基本是为了参加比赛或者为了完成学校大作业写的,也就是说写完后,它就被关入了冷宫,而且更重要的是一个项目的编写者是1-3个人,全局统一好像没有什么概念。更重要的是跟后台合作,都是怎么方便怎么来(你懂得),所以枚举就成了看书时必看,编码时不用的一个概念问题了。

    说了这么多废话,我们来看看怎么样能让我们这些小渣渣能够得心应手的使用它。

    开始之前我要介绍的是每本书,每篇博客都会提到的

    1. 枚举类是一种特殊的类,它和普通的类一样,有自己的成员变量、成员方法、构造器 (只能使用 private 访问修饰符,所以无法从外部调用构造器,构造器只在构造枚举值时被调用);
      一个 Java 源文件中最多只能有一个 public 类型的枚举类,且该 Java 源文件的名字也必须和该枚举类的类名相同,这点和类是相同的(什么意思呢?就是你要是建了个.java文件,里面只能写一个 public 类型的枚举类,可以试试,定义第二个的时候会报错);
    2. 在 Java 中使用 enum 关键字来定义枚举类,其地位与 class、interface 相同(也就是建个类,将class换成enum);

    我感觉刚开始学,注意这两点差不多了。

    让我们先学会用

    我在下面粘出了一个情感的枚举代码:

     public enum EMOTIONAL {
            SECRECY(1, "保密"), SINGLE(2, "单身"), MARRIED(3, "已婚"), DIVORCE(4, "离异");
            private int code;
            private String value;
    
            private EMOTIONAL(int code, String value) {
                this.code = code;
                this.value = value;
            }
    
            public int getCode() {
                return code;
            }
    
            public static int getCode(String value) {
                for (EMOTIONAL emotional : values()) {
                    if (emotional.getValue().equals(value)) return emotional.getCode();
                }
                return -1;
            }
    
            public String getValue() {
                return value;
            }
    
            public static String getValue(int code) {
                for (EMOTIONAL emotional : values()) {
                    if (emotional.getCode() == code) return emotional.getValue();
                }
                return null;
            }
    
            @Override
            public String toString() {
                return value;
            }
        }
        
    

    初学的孩子可能心里跑过一万遍“草泥马”,别着急,听姐姐解释给你听,这都是些啥

    首先

    public enum EMOTIONAL {
            SECRECY(1, "保密"), SINGLE(2, "单身"), MARRIED(3, "已婚"), DIVORCE(4, "离异");
           
            private int code;
            private String value;
    
            private EMOTIONAL(int code, String value) {
                this.code = code;
                this.value = value;
            }
     }
    
    

    这段代码是定义一个枚举类并且实现了构造函数,类名是EMOTIONAL,这边主要是搞了两个参数,这个呢是根据需要来定的,主要呢是看后台那边需要你传过去值是怎么样的,如果不需要向后台传数据,自己写成下面这样也是没有问题的,看你个人需求了

    public enum EMOTIONAL {
            SECRECY("保密"), SINGLE("单身"), MARRIED("已婚"), DIVORCE("离异");
           
            private String value;
    
            private EMOTIONAL(String value) {
                this.value = value;
            }
     }
    
    
    public enum EMOTIONAL {
            SECRECY, SINGLE, MARRIED, DIVORCE;
     }
    
    

    根据你需求的不同,定义不同的枚举类,就会有以下所需的不同功能:

     public static int getCode(String value) {
                for (EMOTIONAL emotional : values()) {
                    if (emotional.getValue().equals(value)) return emotional.getCode();
                }
                return -1;
            }
    
     public static String getValue(int code) {
                for (EMOTIONAL emotional : values()) {
                    if (emotional.getCode() == code) return emotional.getValue();
                }
                return null;
            }
    
    

    看到return -1不要惊讶,他只是个标志值。

    以上这两个方法是得到你需要的对应值,同样根据你项目的需要而定

     @Override
            public String toString() {
                return value;
            }
    

    这个是重写toString(),返回参数Value的值。

    好了枚举类写到这就基本可以了。

    那怎么用到它呢?在你需要用它的时候你需要用你定义的枚举类名.你定义的枚举值如果还要用到什么方法得到什么值,你就得你定义的枚举类名.你定义的枚举值.你定义的对应方法

    好吧,还是举个栗子:

    private void initData(){
    private List<String> emotionList = new ArrayList<String>();
     for(BaseUserInfo.EMOTIONAL emotion:BaseUserInfo.EMOTIONAL.values()){
                emotionList.add(emotion.toString());
        }
    }
    
    

    这个输出是:

    [保密,单身,已婚,离异]
    

    恩,就是这样,不喜欢用这种foreach循环,普通的那种也可以。

    枚举类中的常用方法

    基本会用了以后,介绍几个枚举类中常用的方法:

    String toString(): 返回枚举值的名称(很常用,但想得到自己要的效果记得在枚举类里重写)
    
    int ordinal(): 返回枚举值在枚举类中的索引值(从0开始),即枚举值在枚举声明中的顺序,这个顺序根据枚举值声明的顺序而定;
    
    String name(): 返回此枚举实例的名称,即枚举值 ;
    
    static values(): 返回一个包含全部枚举值的数组,可以用来遍历所有枚举值
    
    int compareTo(E o): 该方法用于与制定枚举对象比较顺序,同一个枚举实例只能与相同类型的枚举实例比较。如果该枚举对象位于指定枚举对象之后,则返回正整数;反之返回负整数;否则返回零(感觉没什么地方用到)
    
    boolean equals()方法: 比较两个枚举类对象的引用
    
    

    当然,还可以使用枚举类实现接口

    public interface Emotion {
    
        public void info();
    
    }
    

    定义一个接口,该接口有一个 info() 方法,凡是实现该接口的类都需要实现该方法。

    public enum Emotional implements Emotion {
        MALE,FEMALE;
        @Override
        public void info() {
            System.out.println("这是一个用于定义性别的枚举类");
        }
    
    }
    

    然后对其进行调用

    public class Test02 {
    
        public static void main(String[] args) {
            Gender.MALE.info();
            Gender.FEMALE.info();
        }
    
    }
    
    

    后记:
    这篇博客终于写完了,感谢各位少年的阅读

    参考文章

    相关文章

      网友评论

          本文标题:看了那么多枚举你真的用了吗

          本文链接:https://www.haomeiwen.com/subject/zqlctxtx.html