2013-10-18 4 views
9

C'è qualche differenza tra il tipo di dati enum e l'interfaccia Enumeration. Sono diventato confuso tra i due.Differenza tra enumerazione e enumerazione

Ho la mia risposta che non sono correlati ma che mi porta ad un'altra domanda.

Non è possibile istanziare l'interfaccia. Allora, qual è il significato di questa linea

Enumeration days = dayNames.elements(); 

Heres il codice completo che contiene quella linea

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

Sono simili a "uomo" e "lamantino". 'enum' è uno zucchero sintattico che consente costanti significative; 'Enumeration' è una classe che fornisce il modo di passare attraverso una collezione. – Amadan

+0

@Amadan Is Enumeration una classe o un'interfaccia. –

+0

L'enumerazione @chetanmehta è un'interfaccia – SpringLearner

risposta

18

Enumeration is an interface: Un oggetto che implementa l'interfaccia Enumeration genera una serie di elementi, uno alla volta. Le chiamate successive al metodo nextElement restituiscono elementi successivi della serie.

Ad esempio, per stampare tutti gli elementi di un Vector<E> v:

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

enum is a data type: Un tipo enum è un tipo di dati speciale che consente per una variabile di un insieme di costanti predefinite. La variabile deve essere uguale a uno dei valori che sono stati predefiniti per esso.

Ad esempio, è necessario specificare un tipo enum giorni-of-the-settimana come:

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

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

tua seconda domanda:

Non possiamo istanziare interfaccia. Allora, qual è il significato di questa linea

Enumeration days = dayNames.elements(); 

dayNames è un Vector, una collezione come List. (Ci sono differenze, ma questo va oltre lo scopo della domanda). Tuttavia, quando viene chiamato daynames.elements(), restituisce un'enumerazione dei componenti del vettore daynames. L'oggetto Enumerazione restituito genererà tutti gli elementi aggiunti a questo vettore. Il primo elemento generato è l'articolo index 0, quindi l'articolo index 1 e così via.

+1

Quindi non c'è alcuna relazione tra i due. –

+0

sì, no replationship – Sage

+2

@chetanmehta Ho aggiornato il post per rispondere alla tua seconda domanda. Ma in futuro prova a pensare di pubblicare una nuova domanda anziché modificarla, in modo che tutti possano vederla. – Sage

1

secondo l'oracolo docs

un tipo enum è un tipo di dati speciale che consente di una variabile per essere un insieme di costanti predefinite. La variabile deve essere uguale a uno dei valori che sono stati predefiniti per esso. Esempi comuni includono le direzioni della bussola (valori di NORD, SUD, EST e OVEST) e i giorni della settimana.

esempio di enumerazione

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

Il risultato è:

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

enumerazione

L'interfaccia enumerazione definisce i metodi con cui è possibile enumera te (ottieni uno alla volta) gli elementi in una collezione di oggetti.

esempio di censimento

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

uscita

Sunday 
Monday 
Tuesday 
Wednesday 
Thursday 
Friday 
Saturday 
+0

Qui giace un'altra mia confusione. L'enumerazione è un'interfaccia, quindi come possiamo avere giorni di quel tipo di dati. –

+0

@chetanmehta quale tipo di dati? – SpringLearner

+0

Non intendeva il tipo di dati. Intendevo come mai i giorni memorizza il tipo di riferimento di dati Enumeration. –

12

Per essere breve, Enumeration è legacy Iterator e Enum è un tipo di dati.

4

Enums sono classi controllate da istanza in java. È possibile predefinire i diversi sapori, un tipo può supportare. Per es.

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

definisce un tipo denominato Direzione che può essere di 4 tipi. Non è consentito istanziare questi tipi al di fuori della loro definizione di tipo. È possibile controllare di più su Enumhere.

Mentre Enumerazione era il vecchio modo di scorrere attraverso una raccolta. Ha due metodi nextElement e hasMoreElements che sono più simili prossimi e hasNext metodi di Iterator interfaccia. Nelle vecchie API come Servlet possiamo ancora vedere alcuni metodi che restituiscono Enumerazione. Per es.

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