Java中怎樣由枚舉常量的ordinal值獲得枚舉常量對象

來源:互聯網
上載者:User

標籤:

Java1.5提供了關鍵字enum,能夠通過該關鍵字方便得定義自己須要的枚舉類型,比方
  1. enum Season {
  2.     SPRING, SUMMER, AUTUMN, WINTER
  3. }
就定義了一個季節枚舉類型。

在本例中,對於Season.SPRING這個對象,Season.SPRING.name()能夠得到該對象的字串,即“SPRING”;反之,由Season.valueOf(“SPRING”)則能夠得到該對象,即Season.SPRING。也就是說,使用name()方法和valueOf(String)方法能夠在枚舉類型對象和字串之間方便得轉換。當然,假設valueOf(String)方法的參數不是該枚舉類型合法的字串,則會拋出IllegalArgumentException異常。

對於枚舉類型,Java內部實際上還是轉換為java.lang.Enum的子類,能夠通過“javap -c Season”命令反編譯來觀察這一點。Enum類提供了一個ordinal()方法,用來返回枚舉對象的序數,比方本例中SPRING, SUMMER, AUTUMN, WINTER的序數就分別為0, 1, 2, 3。在有些情況下,我們須要使用這個序數,並且還有可能再依據這個序數產生所須要的枚舉對象,但是Enum並沒有提供valueOf(int)這個方案,那是不是就做不到呢?

對於這個問題,實際上能夠利用枚舉類型的values()方法間接的做到。values()方法返回一個枚舉對象數組,比方本例就是Season[],數組元素依照序數排列。在自己定義的枚舉類型中,我們僅僅要定義自己的valueOf(int)方法,並返回該數組下標對象的對象就能夠了。代碼例如以下:
  1. enum Season {
  2.     SPRING, SUMMER, AUTUMN, WINTER;
  3.     public static Season valueOf(int ordinal) {
  4.         if (ordinal < 0 || ordinal >= values().length) {
  5.             throw new IndexOutOfBoundsException("Invalid ordinal");
  6.         }
  7.         return values()[ordinal];
  8.     }
  9. }
怎麼樣,還是挺簡單的吧?

Java中怎樣由枚舉常量的ordinal值獲得枚舉常量對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.