你真的会使用枚举么

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

作为一个没毕业的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
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值