certification java

OCPJP 6 – Jour 10 – Les énumérations (enum)

Java 5 introduit une nouvelle notion : les types énumérés (définis par le mot-clé enum), des types qui n’acceptent qu’un ensemble fini d’éléments. Nous verrons en outre que ce type, implémenté sous forme d’une classe, dispose d’autres propriétés intéressantes comme la possibilité de lui ajouter des constructeurs et des méthodes spécifiques.

10.1 – Définition

Dans sa forme la plus basique, les types énumérés permettent la définition d’une liste homogène de constantes, identifiées par son nom. La syntaxe est semblable à celle d’une classe en ajoutant le mot réservé enum, par exemple :

Pour affecter une valeur à une variable, on précise le type énuméré et la valeur de la variable souhaitée parmi celles du type énuméré en utilisant l’opérateur point :

Il n’est pas obligatoire d’utiliser des majuscules pour les constantes d’un type énuméré mais recommandé par la Java Code Conventions.

10.2 – Comparaison de valeurs d’un type énuméré

Il est possible de comparer par égalité deux valeurs d’un même type :

On notera qu’on peut utiliser indifféremment les opérateurs « == », la méthode equals ou encore une instruction switch.

Comparaisons basées sur un ordre

Il n’est pas possible d’utiliser les opérateurs arithmétiques usuels sur les types énumérés. En revanche, on peut recourir à la méthode compareTo (héritée de la classe Enum) qui se fonde sur l’ordre dans lequel on a déclaré les constantes. Les valeurs d’un type énuméré possèdent un ordre naturel qui est celui de leurs définitions : VALEUR_1 < VALEUR_2 < … VALEUR_n.

10.3 – Visibilité d’un type énuméré

La syntaxe pour accéder à un membre d’un type énuméré dépend de sa visibilité.

En tant que classe externe…

Comme une classe normale, un type énuméré ne peut pas être déclaré private, protected, abstract, final ou static en dehors d’une classe.

En tant que classe interne…

Lorsqu’un type énuméré est englobé dans une autre classe (en tant que classe interne), il est obligatoire de préfixer le type énuméré par le nom de la classe englobante.

Informations complémentaires

Un type énuméré ne peut pas être déclaré dans une méthode :

Le point-virgule présent à la fin de la déclaration du type énuméré est optionnel. Ainsi ces deux déclarations sont équivalentes :

10.4 – Constructeurs et méthodes

Il est également possible de doter un type énuméré d’un ou plusieurs constructeurs, de variables et de méthodes. Il faut savoir qu’un constructeur est appelé au moment de l’instanciation des objets constants du type. S’il nécessite des arguments, ces derniers doivent être mentionnés à la suite du nom de la constante.

Si le type énuméré contient des attributs et/ou des méthodes, il est impératif de terminer la définition des constantes par un point virgule.

Le code précédent affichera sur la sortie standard :

Il est même possible de surcharger un constructeur :

Le code précédent affichera sur la sortie standard :

L’utilisation de constructeurs ou de méthodes dans un type énuméré respecte certaines règles :

  • Vous ne pouvez pas invoquer directement un constructeur d’un type énuméré ! Celui-ci est appelé automatiquement avec les arguments définies pour chaque constante du type énuméré.
  • Vous pouvez passer un ou plusieurs arguments au(x) constructeur(s) et il est même autorisé de surcharger les constructeurs comme vous le feriez avec une classe normale.

10.5 – Surcharge d’une méthode pour une constante spécifique

Il est possible, pour chaque élément d’un type énuméré, de surcharger une ou plusieurs méthodes en utilisant un héritage anonyme. Cela peut être utile si vous souhaitez avoir un comportement spécifique pour une constante donnée :

Le code précédent affichera sur la sortie standard :


Auteur
AuteurEdouard WATTECAMPS

OCPJPsuite…
Questions/Réponses

0 réponses

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *