枚举
一,枚举类型具体说明
简单的说.Enum 一般用来表示一组同样类型的常量.
如性别,日期,月份,颜色等.对这些属性用常量的优点是显而易见的,不仅能够保证单例,且在比較的时候能够用 "==" 来替
换 equals.JDK1.5 之前没有 Enum 这个类型,那时候一般用接口常量来替代.
定义枚举类型时本质上就是在定义一个类别.仅仅只是非常多细节由编译器帮您完毕了.所以某些程度上,enum 是一个 keyword,它的作用就像是 class 或 interface.(这就是为什么有些人找不到当中的 value() 方法)
二,枚举类型的用法
1)常量
在 Enum 出现之前,我们定义常量通常是:public static fianl....?? ? ? 这种常量比較单一.而有了枚举就好的多,它能够看成是对象常量,并且还有相似集合的功能,同一时候定义多个对象常量.
如:
用的时候:Signal s = Signal.RED; 即可了
<span style="font-size:14px;">
enum Signal { GREEN, YELLOW, RED; }
</span>
注:用这个方案使用枚举类型,RED 后面的分号能够不用写
3)向枚举中加入新方法
2)switch
<span style="font-size:14px;">public class TrafficLight {
Signal color = Signal.RED;
public void change() { //交通灯切换
switch (color) {
case RED: color = Signal.GREEN; break;
case YELLOW: color = Signal.RED; break;
case GREEN: color = Signal.YELLOW; break;
}
}
} </span>
由于是常量,所以不能让其它人能够 new 这个对象.也就是将这个类封装起来.不让不论什么人能够 new.方法是通过将构造方法私有化即可.
<span style="font-size:14px;">public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLOW("黄色", 4) ;
// 成员变量
private final String name;
private final int index;
// 构造方法,必须私有
private Color(String name, int index) {
this.name = name;
this.index = index;
}
public String getName() { return name; }
public int getIndex() { return index; }
}
</span>
private Color(String name, int index) 注:假设打算自己定义自己的方法.那么必须在 enum 实例序列的最后加入一个分号.
也就是这里的 YELLOW("黄色",4) 后面必须有 ";".
三,枚举的静态方法
枚举的静态方法有两个
1)values() 获取枚举类型的全部枚举常量返回值为
2)valueOf(Class enumType, String name) 返回带指定名称的指定枚举类型的枚举常量.返回值为 static? ElementType
static ? ElementType[]
for(UserTypeEnum userType: UserTypeEnum.values()){
<span style="white-space:pre"></span>if(userType.getName().equalsIgnoreCase(name)){
return userType.getType();
}
}
注:然后就发现一个问题,value 方法我怎么找不到,查查才发现.?values() 方法是编译器插入到 enum 定义中的 static 方法.所以,当你将 enum 实例向上转型为父类 Enum 类,
values() 就不可訪问了.
解决的方法:在 java.lang 包下一个 java.lang.annotation 包(凝视的意思),里面有一个 ELementType 类,当中就有想要找的这两个静态方法.
所以不能说
枚举类型实质上继承 java.lang.Enum 类.
四,EnumSet 类和 EnumMap 类
这两个类在 java.util 包中.看看 api,主要的运用应该没什么问题.
来源: http://www.bubuko.com/infodetail-2461751.html