作为一个没毕业的Android小渣渣,经验是有限的,大学期间本着多读书,多看报,多吃零食,多睡觉的宗旨,看了不少书,书上总会有枚举这个概念,书上写一堆,就是说怎么用,用了它怎么好,然而,自己一写项目总是用的很少,应该说系统将它屏蔽了,根本不用(所以还处于渣渣阶段)
先来说说为什么用的少,不知道同为渣渣的你是不是有这种感觉:自己的内心承认枚举是个好东西,但是觉得写东西时用不到,为什么会用不到?因为项目基本是为了参加比赛或者为了完成学校大作业写的,也就是说写完后,它就被关入了冷宫,而且更重要的是一个项目的编写者是1-3个人,全局统一好像没有什么概念。更重要的是跟后台合作,都是怎么方便怎么来(你懂得),所以枚举就成了看书时必看,编码时不用的一个概念问题了。
说了这么多废话,我们来看看怎么样能让我们这些小渣渣能够得心应手的使用它。
开始之前我要介绍的是每本书,每篇博客都会提到的
- 枚举类是一种特殊的类,它和普通的类一样,有自己的成员变量、成员方法、构造器 (只能使用 private 访问修饰符,所以无法从外部调用构造器,构造器只在构造枚举值时被调用);
一个 Java 源文件中最多只能有一个 public 类型的枚举类,且该 Java 源文件的名字也必须和该枚举类的类名相同,这点和类是相同的(什么意思呢?就是你要是建了个.java文件,里面只能写一个 public 类型的枚举类,可以试试,定义第二个的时候会报错);- 在 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();
}
}
后记:
这篇博客终于写完了,感谢各位少年的阅读
网友评论