2013-10-18 161 views
9

enum數據類型和Enumeration接口之間是否有區別。我在兩者之間感到困惑。枚舉和枚舉之間的區別

我得到了我的答案,他們沒有關係,但這使我想到另一個問題。

我們不能實例化接口。那麼,什麼是此行的

Enumeration days = dayNames.elements(); 

繼承人包含線上

import java.util.Vector; 
import java.util.Enumeration; 

public class EnumerationTester { 

    public static void main(String args[]) { 
     Enumeration days; 
     Vector dayNames = new Vector(); 
     dayNames.add("Sunday"); 
     dayNames.add("Monday"); 
     dayNames.add("Tuesday"); 
     dayNames.add("Wednesday"); 
     dayNames.add("Thursday"); 
     dayNames.add("Friday"); 
     dayNames.add("Saturday"); 
     days = dayNames.elements(); 
     while (days.hasMoreElements()){ 
     System.out.println(days.nextElement()); 
     } 
    } 
} 
+5

它們與「人」和「海牛」大致相似。 'enum'是一個允許有意義的常量的語法糖; '枚舉'是一種提供通過集合的方式。 – Amadan

+0

@Amadan Enumeration是一個類或接口。 –

+0

@chetanmehta枚舉是一個接口 – SpringLearner

回答

18

Enumeration is an interface:實現接口Enumeration的對象會一次生成一系列元素。連續調用nextElement方法會返回該系列的連續元素。

例如,要打印Vector<E> v的所有元素:

for (Enumeration<E> e = v.elements(); e.hasMoreElements();) 
     System.out.println(e.nextElement()); 

enum is a data type:枚舉類型是一種特殊類型的數據使得能夠爲一個變量是一組預定義的常量。該變量必須等於爲其預定義的值之一。

例如,你會指定天的星期幾enum類型:

public enum Day { 
     SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
     THURSDAY, FRIDAY, SATURDAY 
    } 

    public static void main(String[] args) 
    { 
    System.out.ptintln(Day.SUNDAY); // print SUNDAY 
    } 

你的第二個問題:

我們不能實例化接口。那麼,什麼是這個 線

Enumeration days = dayNames.elements(); 

dayNames的意義是Vector,集合就像List。 (有差異,但超出了問題的範圍。)。但是,當調用daynames.elements()時,它會返回矢量daynames的組件的枚舉。返回的Enumeration對象將生成添加到此向量的所有項目。生成的第一個項目是index 0處的項目,然後是index 1處的項目,依此類推。

+1

因此,兩者之間沒有關係。 –

+0

是的,沒有替代 – Sage

+2

@chetanmehta我已更新帖子回答你的第二個問題。但在將來嘗試發佈一個新問題而不是編輯,以便每個人都可以看到它。 – Sage

1

按照神諭docs

枚舉類型是一種特殊的數據類型,使完整的代碼的意義一個變量是一組預定義的常量。該變量必須等於爲其預定義的值之一。常見的例子包括指南針方向(NORTH,SOUTH,EAST和WEST的值)和一週的日子。枚舉的

例如

public class EnumTest { 
    Day day; 

    public EnumTest(Day day) { 
     this.day = day; 
    } 

    public void tellItLikeItIs() { 
     switch (day) { 
      case MONDAY: 
       System.out.println("Mondays are bad."); 
       break; 

      case FRIDAY: 
       System.out.println("Fridays are better."); 
       break; 

      case SATURDAY: case SUNDAY: 
       System.out.println("Weekends are best."); 
       break; 

      default: 
       System.out.println("Midweek days are so-so."); 
       break; 
     } 
    } 

    public static void main(String[] args) { 
     EnumTest firstDay = new EnumTest(Day.MONDAY); 
     firstDay.tellItLikeItIs(); 
     EnumTest thirdDay = new EnumTest(Day.WEDNESDAY); 
     thirdDay.tellItLikeItIs(); 
     EnumTest fifthDay = new EnumTest(Day.FRIDAY); 
     fifthDay.tellItLikeItIs(); 
     EnumTest sixthDay = new EnumTest(Day.SATURDAY); 
     sixthDay.tellItLikeItIs(); 
     EnumTest seventhDay = new EnumTest(Day.SUNDAY); 
     seventhDay.tellItLikeItIs(); 
    } 
} 

的輸出是:

Mondays are bad. 
Midweek days are so-so. 
Fridays are better. 
Weekends are best. 
Weekends are best. 

枚舉

枚舉接口定義的方法的,通過它可以enumera te(一次​​獲取一個)一組對象中的元素。枚舉

import java.util.Vector; 
import java.util.Enumeration; 

public class EnumerationTester { 

    public static void main(String args[]) { 
     Enumeration days; 
     Vector dayNames = new Vector(); 
     dayNames.add("Sunday"); 
     dayNames.add("Monday"); 
     dayNames.add("Tuesday"); 
     dayNames.add("Wednesday"); 
     dayNames.add("Thursday"); 
     dayNames.add("Friday"); 
     dayNames.add("Saturday"); 
     days = dayNames.elements(); 
     while (days.hasMoreElements()){ 
     System.out.println(days.nextElement()); 
     } 
    } 
} 

輸出的

例如

Sunday 
Monday 
Tuesday 
Wednesday 
Thursday 
Friday 
Saturday 
+0

這裏是我另一個困惑。枚舉是一個接口,那麼我們該如何處理那些數據類型。 –

+0

@chetanmehta哪種數據類型? – SpringLearner

+0

並不意味着數據類型。我的意思是如何來存儲枚舉引用類型的數據。 –

12

短,Enumeration是遺留IteratorEnum是一種數據類型。

4

枚舉是java中的實例控制類。你可以預定不同的口味,一種類型可以支持。例如。

public enum Direction { 
    EAST, WEST, NORTH, SOUTH 
} 

定義了一個名爲方向其可以是4種類型的類型。不允許從它們的類型定義之外實例化這些類型。您可以查看更多 Enumhere

雖然枚舉是舊的方式來遍歷集合。它有兩種方法 nextElement的hasMoreElements這更像是下一個 hasNext迭代接口的方法。在像 Servlet這樣的舊API中,我們仍然可以看到一些返回枚舉的方法。例如。

Java.util.Enumeration<String> paramNames = request.getParameterNames();