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

作为一个没毕业的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();
    }

}

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

参考文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,256评论 19 139
  • 晒晒雨阅读 178评论 1 0
  • 昨夜,你还静静地对我说 亲爱的,让我为你织条围巾吧 这个冬天很冷,很漫长 我们的爱情需要温床吗 这一夜,有你在身旁...
    王玊阅读 560评论 1 3
  • 加班补笔记来着,十一点半回来的,看到你给发的最后一条消息是十点五十五,你没有等我,我有点失落,可是又想让你多睡会儿...
    瞳亻阅读 166评论 0 1