1. 程式人生 > >你真的會使用列舉麼

你真的會使用列舉麼

看了那麼多列舉你真的用了嗎

作為一個沒畢業的Android小渣渣,經驗是有限的,大學期間本著多讀書,多看報,多吃零食,多睡覺的宗旨,看了不少書,書上總會有列舉這個概念,書上寫一堆,就是說怎麼用,用了它怎麼好,然而,自己一寫專案總是用的很少,應該說系統將它遮蔽了,根本不用(所以還處於渣渣階段)

先來說說為什麼用的少,不知道同為渣渣的你是不是有這種感覺:自己的內心承認列舉是個好東西,但是覺得寫東西時用不到,為什麼會用不到?因為專案基本是為了參加比賽或者為了完成學校大作業寫的,也就是說寫完後,它就被關入了冷宮,而且更重要的是一個專案的編寫者是1-3個人,全域性統一好像沒有什麼概念。更重要的是跟後臺合作,都是怎麼方便怎麼來(你懂得),所以列舉就成了看書時必看,編碼時不用的一個概念問題了。

說了這麼多廢話,我們來看看怎麼樣能讓我們這些小渣渣能夠得心應手的使用它。

開始之前我要介紹的是每本書,每篇部落格都會提到的

  1. 列舉類是一種特殊的類,它和普通的類一樣,有自己的成員變數、成員方法、構造器 (只能使用 private 訪問修飾符,所以無法從外部呼叫構造器,構造器只在構造列舉值時被呼叫);
    一個 Java 原始檔中最多隻能有一個 public 型別的列舉類,且該 Java 原始檔的名字也必須和該列舉類的類名相同,這點和類是相同的(什麼意思呢?就是你要是建了個.java檔案,裡面只能寫一個 public 型別的列舉類,可以試試,定義第二個的時候會報錯);
  2. 在 Java 中使用 enum 關鍵字來定義列舉類,其地位與 class、interface 相同(也就是建個類,將class換成enum);

我感覺剛開始學,注意這兩點差不多了。

讓我們先學會用

我在下面粘出了一個情感的列舉程式碼:

 public enum EMOTIONAL {
        SECRECY(1, "保密"), SINGLE(2, "單身"), MARRIED(3, "已婚"), DIVORCE(4, "離異");
        private int code;
        private String value;

        private EMOTIONAL(int code, String value) {
            this.code = code;
            this
.value = value; } public int getCode() { return code; } public static int getCode(String value) { for (EMOTIONAL emotional : values()) { if (emotional.getValue().equals(value)) return emotional.getCode(); } return -1; } public String getValue() { return value; } public static String getValue(int code) { for (EMOTIONAL emotional : values()) { if (emotional.getCode() == code) return emotional.getValue(); } return null; } @Override public String toString() { return value; } }

初學的孩子可能心裡跑過一萬遍“草泥馬”,彆著急,聽姐姐解釋給你聽,這都是些啥

首先

public enum EMOTIONAL {
        SECRECY(1, "保密"), SINGLE(2, "單身"), MARRIED(3, "已婚"), DIVORCE(4, "離異");

        private int code;
        private String value;

        private EMOTIONAL(int code, String value) {
            this.code = code;
            this.value = value;
        }
 }

這段程式碼是定義一個列舉類並且實現了建構函式,類名是EMOTIONAL,這邊主要是搞了兩個引數,這個呢是根據需要來定的,主要呢是看後臺那邊需要你傳過去值是怎麼樣的,如果不需要向後臺傳資料,自己寫成下面這樣也是沒有問題的,看你個人需求了

public enum EMOTIONAL {
        SECRECY("保密"), SINGLE("單身"), MARRIED("已婚"), DIVORCE("離異");

        private String value;

        private EMOTIONAL(String value) {
            this.value = value;
        }
 }
public enum EMOTIONAL {
        SECRECY, SINGLE, MARRIED, DIVORCE;
 }

根據你需求的不同,定義不同的列舉類,就會有以下所需的不同功能:

 public static int getCode(String value) {
            for (EMOTIONAL emotional : values()) {
                if (emotional.getValue().equals(value)) return emotional.getCode();
            }
            return -1;
        }

 public static String getValue(int code) {
            for (EMOTIONAL emotional : values()) {
                if (emotional.getCode() == code) return emotional.getValue();
            }
            return null;
        }

看到return -1不要驚訝,他只是個標誌值。

以上這兩個方法是得到你需要的對應值,同樣根據你專案的需要而定

 @Override
        public String toString() {
            return value;
        }

這個是重寫toString(),返回引數Value的值。

好了列舉類寫到這就基本可以了。

那怎麼用到它呢?在你需要用它的時候你需要用你定義的列舉類名.你定義的列舉值如果還要用到什麼方法得到什麼值,你就得你定義的列舉類名.你定義的列舉值.你定義的對應方法

好吧,還是舉個栗子:

private void initData(){
private List<String> emotionList = new ArrayList<String>();
 for(BaseUserInfo.EMOTIONAL emotion:BaseUserInfo.EMOTIONAL.values()){
            emotionList.add(emotion.toString());
    }
}

這個輸出是:

[保密,單身,已婚,離異]

恩,就是這樣,不喜歡用這種foreach迴圈,普通的那種也可以。

列舉類中的常用方法

基本會用了以後,介紹幾個列舉類中常用的方法:

String toString(): 返回列舉值的名稱(很常用,但想得到自己要的效果記得在列舉類裡重寫)

int ordinal(): 返回列舉值在列舉類中的索引值(從0開始),即列舉值在列舉宣告中的順序,這個順序根據列舉值宣告的順序而定;

String name(): 返回此列舉例項的名稱,即列舉值 ;

static values(): 返回一個包含全部列舉值的陣列,可以用來遍歷所有列舉值

int compareTo(E o): 該方法用於與制定列舉物件比較順序,同一個列舉例項只能與相同型別的列舉例項比較。如果該列舉物件位於指定列舉物件之後,則返回正整數;反之返回負整數;否則返回零(感覺沒什麼地方用到)

boolean equals()方法: 比較兩個列舉類物件的引用

當然,還可以使用列舉類實現介面

public interface Emotion {

    public void info();

}

定義一個介面,該介面有一個 info() 方法,凡是實現該介面的類都需要實現該方法。

public enum Emotional implements Emotion {
    MALE,FEMALE;
    @Override
    public void info() {
        System.out.println("這是一個用於定義性別的列舉類");
    }

}

然後對其進行呼叫

public class Test02 {

    public static void main(String[] args) {
        Gender.MALE.info();
        Gender.FEMALE.info();
    }

}

最後講講什麼時候可以用到列舉,以下情況你是可以考慮用到列舉的:

  • 性別
  • 情感狀態
  • 星期
  • 月份
  • 加減乘除運算
  • 顏色

等等一系列都可以使用列舉

後記:
這篇部落格終於寫完了,感謝各位少年的閱讀

參考文章