2010-09-22 4 views
0

L'interface d'énumération a la méthode hashMoreElements utilisée avec la variable de réfrence (Enumv), comment peuvent-elles être utilisées puisqu'elles ne sont pas implémentées? Je voulais dire que c'est une méthode d'interface, comment peut-elle être appelée - Enumv.hasMoreElements() elle n'a pas d'implémentation.Méthodes d'énumération

Vector v = new Vector(); 
//v contains list of elements - Suppose 
Enumeration Enumv = v.elements(); 
while(Enumv.hasMoreElements()) { 
    System.out.println(Enumv.nextElement()); 
} 

Comment est-ce possible?

+3

Je ne comprends pas la question. Veuillez réviser la terminologie que vous avez utilisée. – BalusC

+1

Vous devez être plus clair. –

+2

@ fermer-électeurs: Comment donner au gars quelques minutes pour le réparer? (Oui, il aurait dû être plus clair à l'origine, mais ...) –

Répondre

3

Pour votre code,

Enumeration Enumv = v.elements(); 

C'est ce que Vector revient à vous.

public Enumeration<E> elements() { 
    return new Enumeration<E>() { 
     int count = 0; 

     public boolean hasMoreElements() { 
     return count < elementCount; 
     } 

     public E nextElement() { 
     synchronized (Vector.this) { 
      if (count < elementCount) { 
      return (E)elementData[count++]; 
      } 
     } 
     throw new NoSuchElementException("Vector Enumeration"); 
     } 
    }; 
} 

Comme vous pouvez le voir, Vector retourne une classe Enumeration mis en œuvre (qui annonymous au développeur).

comment peut-il être appelé - Enumv.hasMoreElements() il ne ont une mise en œuvre.

Il est mis en œuvre (comme indiqué ci-dessus).

+0

Merci beaucoup. –

3

Enumeration est une interface. Il fournit les définitions de méthode, mais tout ce qui implémente l'interface doit fournir l'implémentation. Le point est que le code en utilisant l'objet via l'interface n'a pas besoin de connaître l'implémentation - juste que quelque chose met en œuvre les méthodes pertinentes.

Dans le cas de la valeur renvoyée par Vector.elements(), l'implémentation Enumeration est réellement fournie via une classe interne anonyme - mais l'appelant n'a pas besoin de s'en soucier du tout.

(Notez que ce n'est pas spécifique à Enumeration -. Il est le principe général d'interfaces)

+0

Je n'ai pas obtenu les trucs de la classe interne anonyme Pouvez-vous s'il vous plaît simplifier pour moi –

+1

@Patrik: télécharger JDK, intégrer 'src.zip' dans votre IDE -si tout- et lire le code source tout en ouvrant' java.util.Vector' classe. L'implémentation est là dans la méthode 'elements()'. – BalusC

+1

@Pratik: Il semblerait que vous pourriez faire avec la lecture d'un bon livre Java, pour être honnête. Stack Overflow est idéal pour des questions spécifiques, mais ce n'est pas un bon moyen d'apprendre une langue. –

0

Je ne comprends pas tout à fait votre question.

La classe Vector a une implémentation de la méthode elements(), qui renvoie une énumération. L'implémentation concrète d'Enumeration renvoyée est requise pour avoir une implémentation de la méthode hasMoreElements().

1

Vector.elements() ne retourne pas simplement "une énumération".
En reallity il renvoie une instance d'une implémentation de Enumeration mais une implémentation de Enumeration "est-un" Enumeration et peut être "castée" à l'interface Enumeration. Par conséquent, la méthode est implémentée, c'est pourquoi cela fonctionne.


Dans le cas Vector la mise en œuvre est une classe anonyme directement basée sur Enumeration.

public Enumeration<E> elements() { 
    return new Enumeration<E>() { 
     int count = 0; 

     public boolean hasMoreElements() { 
      return count < elementCount; 
     } 

     public E nextElement() { 
      synchronized (Vector.this) { 
       if (count < elementCount) { 
        return elementData(count++); 
       } 
      } 
      throw new NoSuchElementException("Vector Enumeration"); 
     } 
    }; 
} 

Ressources:

+0

Il retourne une instance d'énumération mais il n'y a pas de classe d'énumération. Je n'ai pas compris –

+0

Il existe des implémentations d'Enumeration. Par exemple celui retourné par 'v.elements();'. Vous ne pouvez pas avoir d'instance d'interfaces, chaque instance est liée à une classe. –

+0

Vous m'avez battu dans le code de collage .... lol –

0

La méthode elements() de la classe Vector retourne une instance d'une classe anonyme qui implémente les méthodes de l'interface Enumeration. Vous n'avez pas besoin de savoir quoi que ce soit sur cette classe, puisque l'interface définit comment elle doit se comporter - c'est exactement le point des interfaces.

Notez que Vector et Enumeration sont tous les deux obsolètes et ne devraient plus être utilisés. Au lieu de cela, utilisez ArrayList et Iterator.

Questions connexes