2013-10-18 15 views
9

Gibt es einen Unterschied zwischen enum Datentyp und Enumeration Schnittstelle. Ich bin zwischen den beiden verwirrt.Unterschied zwischen Enumeration und Enumeration

Ich habe meine Antwort, dass sie nicht verwandt sind, aber das bringt mich zu einer anderen Frage.

Wir können die Schnittstelle nicht instanziieren. Also, was ist die Bedeutung dieser Linie

Enumeration days = dayNames.elements(); 

Heres den vollständigen Code diese Zeile enthält

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

Sie sind ungefähr so ​​ähnlich wie "Man" und "Manatee". 'enum' ist ein syntaktischer Zucker, der sinnvolle Konstanten erlaubt; 'Enumeration' ist eine Klasse, die es ermöglicht, durch eine Sammlung zu gehen. – Amadan

+0

@Amadan ist eine Klasse oder eine Schnittstelle Enumeration. –

+0

@chetanmehta Aufzählung ist eine Schnittstelle – SpringLearner

Antwort

18

Enumeration is an interface: Ein Objekt, das die Schnittstelle Enumeration implementiert, generiert nacheinander eine Reihe von Elementen. Aufeinander folgende Aufrufe an die nextElement-Methode geben aufeinanderfolgende Elemente der Serie zurück.

beispielsweise alle Elemente eines Vector<E> v drucken:

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

enum is a data type: einen ENUM-Typ ist ein spezieller Datentyp, der für eine Variable ein Satz von vordefinierten Konstanten sein können. Die Variable muss einem der vordefinierten Werte entsprechen.

Zum Beispiel würden Sie einen angeben Tage-of-the-Woche enum Typen wie:

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

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

Ihre zweite Frage:

Wir nicht Schnittstelle instanziieren. Also, was ist die Bedeutung dieser Linie

Enumeration days = dayNames.elements(); 

dayNames ist ein Vector, eine Sammlung wie List. (Es gibt Unterschiede, aber das ist nicht der Bereich der Frage.). Wenn jedoch daynames.elements() aufgerufen wird, gibt es eine Auflistung der Komponenten von Vektor daynames zurück. Das zurückgegebene Enumeration-Objekt generiert alle Elemente, die diesem Vektor hinzugefügt wurden. Der erste generierte Artikel ist der Artikel unter index 0, dann der Artikel unter index 1 und so weiter.

+1

So gibt es keine Beziehung zwischen den beiden. –

+0

ja, nein reprelationship – Sage

+2

@chetanmehta Ich habe den Beitrag aktualisiert, um Ihre zweite Frage zu beantworten. Aber versuchen Sie in Zukunft, eine neue Frage zu stellen anstatt sie zu bearbeiten, damit jeder sie sehen kann. – Sage

1

nach dem Orakel docs

Ein Aufzählungstyp ist ein spezieller Datentyp, der für ermöglicht eine Variable als eine Menge vordefinierter Konstanten. Die Variable muss einem der vordefinierten Werte entsprechen. Häufige Beispiele sind Kompassrichtungen (Werte von NORTH, SOUTH, EAST und WEST) und die Wochentage.

Beispiel enum

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(); 
    } 
} 

Der Ausgang ist:

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

Enumeration

Die Aufzählung Schnittstelle, die Methoden, mit denen definiert Sie können enumera te (erhalten Sie einzeln) die Elemente in einer Sammlung von Objekten.

Beispiel Aufzählung

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()); 
     } 
    } 
} 

Ausgang

Sunday 
Monday 
Tuesday 
Wednesday 
Thursday 
Friday 
Saturday 
+0

Hier liegt meine weitere Verwirrung. Aufzählung ist eine Schnittstelle, wie können wir dann Tage dieses Datentyps haben. –

+0

@chetanmehta welcher Datentyp? – SpringLearner

+0

Bedeutet nicht den Datentyp. Ich meinte, wie kommt es, Tage speichert Enumeration Referenztyp der Daten. –

12

kurz zu sein, ist Enumeration Vermächtnis Iterator und Enum ist ein Datentyp.

4

Enums sind instanzgesteuerte Klassen in Java. Sie können die verschiedenen Geschmacksrichtungen vordefinieren, die ein Typ unterstützen kann. Für Beispiel

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

definiert einen Typ Richtung benannt, die von 4 Typen sein kann. Es ist nicht erlaubt, diese Typen von außerhalb ihrer Typdefinition zu instanziieren. Sie können mehr auf Enumhere überprüfen.

Während Enumeration war der alte Weg, um durch eine Sammlung zu iterieren. Es verfügt über zwei Methoden next und hasMoreElements die eher wie nächste und hasNext Methoden der Iterator Schnittstelle sind. In alten APIs wie Servlet können wir noch einige Methoden sehen, die Enumeration zurückgeben. Für Beispiel

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