你真的会使用枚举么

来源:互联网 发布:成都软件培训哪家好 编辑:程序博客网 时间:2024/06/05 19:00

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

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

最后讲讲什么时候可以用到枚举,以下情况你是可以考虑用到枚举的:

  • 性别
  • 情感状态
  • 星期
  • 月份
  • 加减乘除运算
  • 颜色

等等一系列都可以使用枚举

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

参考文章

0 0
原创粉丝点击