列舉類的理解和應用
阿新 • • 發佈:2019-01-02
列舉型別
定義
用於宣告一組命名的常數,當一個變數有幾種可能的取值時,可以將它定義為列舉型別。是指將變數的水電費水電費水電費列出來,變數的值只限於列舉出來的值的範圍內。
簡單形式
`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對映查了查是可以完成列舉對映的,不過在對映過程中總是出錯,暫時還沒有對映成功,只是加深一下對於列舉型別的理解和使用。
日後應該多應用一下列舉