关于枚举的理解

来源:互联网 发布:自己在知乎匿名 编辑:程序博客网 时间:2024/06/05 08:53
关于枚举
随着开发的实践,枚举这个词汇不断的涌现在眼前,总是知其然,不知其所以然。
甚至有可能在开发的时候想不起来用它,还是习惯于写静态全局常量,来一套public static final
也就是常用的constant类,当然这是无可厚非的呦。



1.所有地方都能查到的解释:(证明很基本,也很重要)
    a.枚举类是一种特殊的类,它和普通的类一样,有自己的变量、方法和构造器。它的构造器只能
使用private访问修饰符,所以无法从外部调用构造器,构造器只能在构造枚举值时被调用
b.一个java源文件中只能有一个public类型的枚举类,而且该原文件的名字也必须和该枚举类的
名字一致。也就是在一个文件中只能有一个public修饰的枚举类。这里不包括内部类哈,指的是
公共访问的.java文件的入口。
c.枚举类和class,interface地位是等同的,枚举也能实现接口。
d.枚举类的对象是有限且固定的,常用于状态、类型
e.枚举类默认集成了java.lang.Enum 类,并实现了java.lang.Seriablizable 和 java.lang.Comparable 
两个接口
f.所有的枚举值都默认是public static final的,不用重复声明,而且枚举值应该显式的在枚举类第一行列
出,否则无法产生实例,非抽象的枚举类不能再派生子类。
g.枚举值列举的时候也可以实现该枚举类实现的接口方法。

2.枚举值常用的方法:
    a.String toString() 默认返回的枚举的名称,可自定义进行重写
b.int ordinal()  返回枚举对象的索引值,根据枚举值声明的顺序而定,从0开始;
c.String name()  返回枚举值
d.static values() 包含所有的枚举实例的数组,可用来遍历
e.int compareTo(E o) 用于与制定枚举对象比较顺序,只能同类型比较如果该对象位于指定对象之后则返回正整
反之返回负整数,否则返回零,整数值为二者顺序之差。

f.boolean equals() 比较两个枚举实例的引用。

    3.例子:

 public enum PEOPLE{        //枚举实例        ADULT(0,"成人"),CHILD(1,"儿童"),BABAY(2,"婴儿");        //枚举成员变量        private int type;        private String name;        //枚举构造        PEOPLE(int type, String name) {            this.type = type;            this.name = name;        }        //枚举方法        public int getType() {            return type;        }        public String getName() {            return name;        }        //枚举方法根据name获取type值        public int getType(String name) {            for (PEOPLE people : values()){                if (people.getName().equals(name)){                    return people.getType();                }            }            return -1;        }        //枚举方法根据type获取name值        public String getName(int type) {            for (PEOPLE people : values()){                if (people.getType() == type){                    return people.getName();                }            }            return null;        }        //枚举值        @Override        public String toString() {            return name;        }    }


原创粉丝点击