jdk6 enum枚舉總結

一。

jdk5 和 jdk6 中引入了enum類型,java.lang.Enum implements comparable ,Serializable 。

java.uti.concurrent.TimeUnit工具類的實現,jdk5 和 jdk6有明顯區別;

 

jdk6中定義七種枚舉: NANOSECONDS MICROSECONDS MILLISECONDS SECONDS MINUTES HOURS DAYS , 每一種值中重寫了9個public方法,可供對象和類靜態調用,如:

    HOURS {
        public long toNanos(long d)   { return x(d, C5/C0, MAX/(C5/C0)); }
        public long toMicros(long d)  { return x(d, C5/C1, MAX/(C5/C1)); }
        public long toMillis(long d)  { return x(d, C5/C2, MAX/(C5/C2)); }
        public long toSeconds(long d) { return x(d, C5/C3, MAX/(C5/C3)); }
        public long toMinutes(long d) { return x(d, C5/C4, MAX/(C5/C4)); }
        public long toHours(long d)   { return d; }
        public long toDays(long d)    { return d/(C6/C5); }
        public long convert(long d, TimeUnit u) { return u.toHours(d); }
        int excessNanos(long d, long m) { return 0; }
    },

TimeUnit.HOURS.toDays(30L) 返回1L ;

 

jdk5中定義4種枚舉: ANOSECONDS(0)  MICROSECONDS(1) MILLISECONDS(2) SECONDS(3) ,通過構造TimeUnit(int index)屬性index值。包含一些靜態 和 對象方法,

 

jdk6 的Timeunit的使用:

TimeUnit.values();

TimeUnit.DAYS.toHours(2)

TimeUnit unit=TimeUnit.HOURS ; unit.toDay說(24); unit.convert(1, TimeUnit.DAYS)

TimeUnit.HOURS.convert(1, TimeUnit.DAYS)

 

引用如下:http://blog.csdn.net/abing37/archive/2009/07/29/4391222.aspx

二. 原理:

實際上 Enum 類型就是以 Java 類來實現的,沒有什麼新的特點,只不過 java 編譯器幫我們做了語法的解析和編譯。完全也可以自己實現。

對象,看個下面的例子:

 

1.        代碼一 WeekDay.java :

 

view plaincopy to clipboardprint?
 /** 
 * @author yubing.linyb 
 * 2009.7.29 
 * 定義一個枚舉類型,代表星期一到星期日的7個縮寫常量 
 * 同時還定義了枚舉類型的屬性day,該屬性可以是final,也可是變量 
 * 同時還定義了該枚舉類型的一個方法printDay 
 */ 
public enum WeekDay {  
Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri(  
        "Friday"), Sat("Saturday"), Sun("Sunday");  
 
/**定義枚舉類型自己的屬性**/ 
private final String day;  
   
private WeekDay(String day) {  
     this.day = day;  
}  
 
/**定義枚舉類型自己的方法**/ 
public static void printDay(int i){  
     switch(i){  
     case 1: System.out.println(WeekDay.Mon); break;  
     case 2: System.out.println(WeekDay.Tue);break;  
     case 3: System.out.println(WeekDay.Wed);break;  
     case 4: System.out.println(WeekDay.Thu);break;  
     case 5: System.out.println(WeekDay.Fri);break;  
     case 6: System.out.println(WeekDay.Sat);break;  
     case 7: System.out.println(WeekDay.Sun);break;  
     default:System.out.println("wrong number!");  
     }  
}  
   
public String getDay() {  
     return day;  
}  

 

Java Enum 類型的語法結構儘管和 java 類的語法不一樣,應該說差別比較大。但是經過編譯器編譯之後產生的是一個 class 文件。該 class 文件經過反編譯可以看到實際上是生成了一個類,該類繼承了 java.lang.Enum<E>.

WeekDay (javap WeekDay 命令 之後得到的內容如下 ( 去掉了彙編代碼 ) :

view plaincopy to clipboardprint?
public final class WeekDay extends java.lang.Enum{  
    public static final WeekDay Mon;  
    public static final WeekDay Tue;  
    public static final WeekDay Wed;  
    public static final WeekDay Thu;  
    public static final WeekDay Fri;  
    public static final WeekDay Sat;  
    public static final WeekDay Sun;  
    static {};  
    public static void printDay(int);  
    public java.lang.String getDay();  
    public static WeekDay[] values();  
    public static WeekDay valueOf(java.lang.String);  

三.

java Enum標識一組相同類型的常量,既能保證單例,比較時可以直接=,不用equal比較。

四。舉例:

 

顏色:

public enum Color {

  RED , BLUE,GREEN,BLACK ;

}

 

 public enum EnumExample {
  male(1) , female(1) ;
  final int value ;
  EnumExample(int value){
   this.value = value ;
  }
  
 }

 

  EnumExample a = EnumExample.male ;
  System.out.println(a.name() + a.value );

 

發佈了99 篇原創文章 · 獲贊 0 · 訪問量 4890
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章