尚硅谷Java培训之枚举的特别说明

1、枚举中定义属性

  • 枚举类对象的属性不应允许被改动, 所以应该使用 private final修饰。不是语法要求,而是语义要求
  • 枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。
  • 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数。

package com.enumtype.before15;

 

public class TestWeekField {

 

    public static void main(String[] args) {

         Week w = Week.MONDAY;

         System.out.println(w);

    }

}

enum Week{

    MONDAY(“星期一”),

    TUESDAY(“星期二”),

    WEDNESDAY(“星期三”),

    THURSDAY(“星期四”),

    FRIDAY(“星期五”),

    SATURDAY(“星期六”),

    SUNDAY(“星期日”);

    private final String DESCRPTION;

 

    private Week(String dESCRPTION) {

         DESCRPTION = dESCRPTION;

    }

    public String toString(){

         return DESCRPTION;

    }

}

2、枚举类可以自定义方法,静态和非静态

3、枚举类可以实现一个或者多个接口(了解)

若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。

若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法

interface Change{

    void degenerate();

}

interface Checkable{

    void check();

}

enum Gender implements Change,Checkable{

    MAN{

         public void degenerate(){

             System.out.println(“咔嚓一刀”);

         }

    },WOMAN{

         public void degenerate(){

             System.out.println(“比较复杂”);

         }

    };

    public void check(){

         System.out.println(“脱光”);

    }

}

4、枚举类可以自己定义抽象方法(了解)

enum Payment{

    CASH{

         public void pay(){

             System.out.println(“现金支付”);

         }

    },

    WECHAT{

         public void pay(){

             System.out.println(“微信支付”);

         }

    },

    ALIPAY{

         public void pay(){

             System.out.println(“支付鸨支付”);

         }

    },

    CARD{

         public void pay(){

             System.out.println(“银行卡支付”);

         }

    },

    CREDIT{

         public void pay(){

             System.out.println(“信用卡支付”);

         }

    };

    public abstract void pay();

}

 

5 关于枚举的拓展

java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。

 


上一篇:
下一篇: