1. 程式人生 > >列舉類的理解和應用

列舉類的理解和應用

列舉型別

定義

    用於宣告一組命名的常數,當一個變數有幾種可能的取值時,可以將它定義為列舉型別。是指將變數的水電費水電費水電費列出來,變數的值只限於列舉出來的值的範圍內。

簡單形式

    `public enum StatusEnum {AVAIABLE,DISABLED}`
    只是定義一個列舉然後裡面寫入幾個常量而已,可以將一些有關型別的資訊儲存在列舉類裡面,在使用的時候發現`StatusEnum.AVAIABLE`代表的是該列舉型別的量,覺得比較奇怪列舉裡面不是常量嗎,為啥還是列舉型別呢,原來列舉裡面的各個選項是列舉的具體例項,可以這樣理解列舉型別上面的列舉可以寫成下面的形式。
    程式碼如下:
    `public class StatusEnum { private static final StatusEnum AVAIABLE ="AVAIABLE"; private static final StatusEnum DISABLED="DISABLED";}`

重寫建構函式

    我們可以通過重寫建構函式讓列舉型別複雜一些,為我們儲存型別於鍵值對的值,例如異常資訊、前後端狀態碼資訊等都可以儲存在裡面,舉個Spring框架用到的HttpStatus該列舉類儲存了後端返回到前端的各種錯誤狀態碼以及原因,原始碼如下:
public enum HttpStatus {

    // 1xx Informational

    /**
     * {@code 100 Continue}.
     * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.2.1">HTTP/1.1: Semantics and Content, section 6.2.1</a>
     */
CONTINUE(100, "Continue"), /** * {@code 101 Switching Protocols}. * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.2.2">HTTP/1.1: Semantics and Content, section 6.2.2</a> */ SWITCHING_PROTOCOLS(101, "Switching Protocols"), /** * {@code 102 Processing}. * @see
<a href="http://tools.ietf.org/html/rfc2518#section-10.1">WebDAV</a> */
PROCESSING(102, "Processing"), ……………………省略
我們自定義的UserStatus為:
package com.tgb.admin.model;

public enum UserStatus {

    /** 無效*/  
    DISABLED(0,"the user is not exits"),  
    /** 有效 */  
    AVAILABLE(1,"user is persistent");  

    private int status;  

    private String value;

    UserStatus(int status,String content){  
        this.status = status;  
        this.value=content;
    }  

    public int getStatus() {  
        return status;  
    }  
    public String getValue(){
        return value;
    };
}
設計和使用列舉是為了提供一組不變的常量,所以,我們並給成員變數提供set方法。

列舉作為實體屬性對映

    想把列舉作為實體的一個屬性對映到資料庫裡面,這樣省了很多轉換過程,如列舉狀態為1,表示無效,2表示有效,讓列舉自動轉換儲存到資料庫裡面為整形,mybatis對映查了查是可以完成列舉對映的,不過在對映過程中總是出錯,暫時還沒有對映成功,只是加深一下對於列舉型別的理解和使用。
    日後應該多應用一下列舉