1. 程式人生 > 其它 >自定義列舉類的使用以及理解

自定義列舉類的使用以及理解

1、列舉類的理解

/**
 *  一、列舉類的理解
 *  1)列舉是什麼意思 一一列舉出來 有限的 確定個數的
 *  2)列舉類的理解:當前類的物件是有限個的、確定的 能一一的列舉出來,我們稱此類是列舉類, 這裡例如 季節這個類就 四個季節, Season 就四個物件 Season
 *     就是列舉類
 *
 *  3)當需要定義一組常量時強烈推薦使用列舉類
 *  4)如果列舉類中只有一個物件,那麼可以看成是單例模式的實現方式
 *
 * 二、建立列舉類的方式
 *   1)自定義列舉類
 *   2)使用Enum關鍵字

 * 三、Enum 類中常用的方法
 *   1)values()方法返回當前列舉類的物件陣列
 *   2) valueOf(String str) 可以把一個字串轉化為對應的列舉類物件,要求字串必須是和物件的名字一樣
 *
 * 四、使用Enum關鍵字定義的列舉類實現介面
 *   1) 實現介面在Enum 類中重寫抽象方法
 *   2) 列舉類的物件各自重寫介面的方法
 *
 */

2、自定義列舉類

2.1 傳統的方式自定義列舉類

public class Season {

    //1)私有屬性
    private final String seasonName;
    private final String seasonDes;


    //2)私有話構造器 這裡不能公有 否則 Season的物件就有很多個了,不能-- 的列舉出來了
    private Season(String seasonName,String seasonDes){

        this.seasonDes = seasonDes;
        this.seasonName = seasonName;

    }


    //3)提供當前列舉類的多個物件 用 public static final修飾
    public static final Season SPRING = new Season("spring","春暖花開");
    public static final Season SUMMER = new Season("summer","夏日炎炎");
    public static final Season AUTUMN = new Season("autumn","秋高氣爽");
    public static final Season WINTER = new Season("winter","冰天雪地");


    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDes() {
        return seasonDes;
    }


    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDes='" + seasonDes + '\'' +
                '}';
    }
}

2.2使用Enum關鍵字來建立列舉類

/**
 *
 *
 *   NonPayment //未支付
 *     Paid  //已支付
 *
 *      Return //已退貨
 *
 *  定義的列舉類 繼承的是 class java.lang.Enum
 *
 */
public enum Order implements Info{

    // public static fianl Order NONPAYMENT =  一定不要寫了,多個物件之間 用逗號分割,最後一個用分號就行。
    //1)提供當前列舉類的物件 必須先放到第一位
    NONPAYMENT("NonPayment"){
        public void show(){
            System.out.println("NonPayment");
        }
    },
    PAID("Paid"){
        public void show(){
            System.out.println("Paid");
        }
    },
    RETURNED("Return"){
        public void show(){
            System.out.println("Return");
        }
    };

    //2)私有屬性
    private String status; //訂單的狀態

    //3)私有構造器
    private Order(String status){
        this.status = status;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }


//    public void show(){
//        System.out.println("====info====");
//    }

}

3、Enum 類中常用的方法

   1)values()方法返回當前列舉類的物件陣列
2) valueOf(String str) 可以把一個字串轉化為對應的列舉類物件,要求字串必須是和物件的名字一樣

        Order nonPayment =  Order.NONPAYMENT;
        System.err.println(Order.class.getSuperclass());

        System.out.println(nonPayment);

        System.out.println("=======================");
        Order[] orders = nonPayment.values();

        for (int i = 0; i < orders.length; i++) {
            System.out.println(orders[i]);

        }


        Order RETURNED = Order.valueOf("RETURNED");

4、使用Enum關鍵字定義的列舉類實現介面

    1) 實現介面在Enum 類中重寫抽象方法
2) 列舉類的物件各自重寫介面的方法

/**
 *
 *
 *   NonPayment //未支付
 *     Paid  //已支付
 *
 *      Return //已退貨
 *
 *  定義的列舉類 繼承的是 class java.lang.Enum
 *
 */
public enum Order implements Info{

    // public static fianl Order NONPAYMENT =  一定不要寫了,多個物件之間 用逗號分割,最後一個用分號就行。
    //1)提供當前列舉類的物件 必須先放到第一位
    NONPAYMENT("NonPayment"){
        public void show(){
            System.out.println("NonPayment");
        }
    },
    PAID("Paid"){
        public void show(){
            System.out.println("Paid");
        }
    },
    RETURNED("Return"){
        public void show(){
            System.out.println("Return");
        }
    };

    //2)私有屬性
    private String status; //訂單的狀態

    //3)私有構造器
    private Order(String status){
        this.status = status;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }


//    public void show(){
//        System.out.println("====info====");
//    }
}