java之 ------ 枚举类型

枚举


一、枚举类型详细说明

简单的说,Enum一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且在比较的时候可以用”==”来替

换equals。JDK1.5之前没有Enum这个类型,那时候一般用接口常量来替代。

定义枚举类型时本质上就是在定义一个类别,只不过很多细节由编译器帮您完成了,所以某些程度上,enum是一个关键字,它的作用就像是class或interface。(这就是为什么有些人找不到其中的value()方法)


二、枚举类型的使用方法

1)常量

在Enum出现之前,我们定义常量一般是:public static fianl....      这样的常量比较单一,而有了枚举就好的多,它可以看成是对象常量,而且还有类似集合的功能,同时定义多个对象常量。

如:

<span style="font-size:14px;">enum Signal { 
   GREEN, YELLOW, RED;
} </span>

用的时候:Signal s = Signal.RED;就行了

注:用这种方法使用枚举类型,RED后面的分号可以不用写

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>
3)向枚举中添加新方法

<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>
因为是常量,所以不能让其他人可以new这个对象,也就是将这个类封装起来,不让任何人可以new,方法是通过将构造方法私有化即可。private Color(String name, int index)

注:如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。也就是这里的YELLOW("黄色",4)后面必须有“ ; ”

三、枚举的静态方法

枚举的静态方法有两个

1)values()获取枚举类型的所有枚举常量返回值为static ElementType[]

for(UserTypeEnum userType: UserTypeEnum.values()){
<span style="white-space:pre">	</span>if(userType.getName().equalsIgnoreCase(name)){
		return userType.getType();
	}
}

2)valueOf(Class<T> enumType, String name) 返回带指定名称的指定枚举类型的枚举常量。返回值为static ElementType

注:然后就发现一个问题,value方法我怎么找不到,查查才发现, values()方法是编译器插入到enum定义中的static方法,所以,当你将enum实例向上转型为父类Enum类,

values()就不可访问了。解决办法:在java.lang包下一个java.lang.annotation包(注释的意思),里面有一个ELementType类,其中就有想要找的这两个静态方法。所以不能说

枚举类型实质上继承java.lang.Enum类。

四、EnumSet类和EnumMap类

这两个类在java.util包中,看看api,基本的运用应该没什么问题。



















评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值