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


    枚举


    一、枚举类型具体说明

    简单的说。Enum一般用来表示一组同样类型的常量。

    如性别、日期、月份、颜色等。对这些属性用常量的优点是显而易见的,不仅能够保证单例,且在比較的时候能够用”==”来替

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

    定义枚举类型时本质上就是在定义一个类别。仅仅只是非常多细节由编译器帮您完毕了。所以某些程度上,enum是一个keyword,它的作用就像是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,主要的运用应该没什么问题。



















  • 相关阅读:
    AJAX请求头Content-type
    原 layer父子页面交互
    layer.closeAll()无法关闭弹窗的解决办法之一
    成员函数的重载,覆盖与隐藏
    const限定符用法汇总
    构造函数和析构函数的调用时机
    MFC 消息映射、分派和传递
    C++对象模型
    函数指针与虚函数表
    数据类型与内存映像
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8286736.html
Copyright © 2020-2023  润新知