Java 枚举类型的基础和高级用法

来源:互联网 发布:算法分析的两个方面是 编辑:程序博客网 时间:2024/05/21 08:21

    java枚举类型自从jdk1.5产生以来,在自己的工作用很少使用到,或许还是使用以前常量定义的方式,所以没有意识到枚举类型是可以替代的,关于使用常量方式来列举的用法不再陈述,相信在使用过程中大家如果会总结,总会发现一些弊端,下面看看枚举类型的用法,是可以替代上述的常量的方式列举事物的。

  1.     最为常用的列举:
    public enum Color { RED, GREEN, BLANK, YELLOW }
  2. 往枚举中添加自定义方法
    public enum Color { RED("红色", 1), GREEN("绿色", 2), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 普通方法 public static String getName(int index) { for (Color c : Color.values()) { if (c.getIndex() == index) { return c.name; } } return null; } // get set 方法 忽略 }

    上面的getName方法也就是自己定义的一个静态方法,可以直接使用,也就是说在枚举类型的内部,可以存在与枚举相关的方法,但是因为枚举本身被定义为final了,所以这种方法一般都是返回数据。 
  3. 覆盖枚举的方法
    public enum Color {RED("红色", 1), GREEN("绿色", 2), YELLO("黄色", 4);// 成员变量private String name;private int index;// 构造方法private Color(String name, int index) {    this.name = name;    this.index = index;}//覆盖方法@Overridepublic String toString() {    return this.index+"-->"+this.name;} // get set 方法 忽略}

    这里的toString 方法,在没有重新之前,默认是可以直接调用的,但是其返回值为枚举的常量值,如:RED或YELLO等,但是复写之后,就可以实现自己定义的方式。
  4. 枚举实现接口
    public interface Behaviour {void print();String getInfo();}public enum Color implements Behaviour{RED("红色", 1), GREEN("绿色", 2), YELLO("黄色", 4);// 成员变量private String name;private int index;// 构造方法private Color(String name, int index) {    this.name = name;    this.index = index;}//接口方法@Overridepublic String getInfo() {    return this.name;}//接口方法@Overridepublic void print() {    System.out.println(this.index+":"+this.name);}}

    通过实现接口,能够实现其他的一些变量和接口中的方法,为枚举开拓更多的用法。
  5. 使用接口组织枚举
    public interface Food { enum Coffee implements Food{ BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO } enum Dessert implements Food{ FRUIT, CAKE, GELATO } }
    6.构造抽象方法,要求枚举实现
    public enum Phone{ APPLE {double totalprice(double a,double b){return a+b;}}, HUAWEI {double totalprice(double a,double b){return a+b-2;}}, SUMSANG {double totalprice(double a,double b){return a+b-4;}};abstract totalprice(doublea,double b); }

    这样,就可以讲不同的行为与每个枚举常量关联起来,使得每个枚举常量本身带有一个方法,最后通过常量类型调用该方法就是得到相应的值。

0 0
原创粉丝点击