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


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. }
怎么樣,還是挺簡單的吧?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM