# Programmation Java/Énumérations

* Introduction
* La notion de machine virtuelle
* Installation
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Premier programme
** Commentaires
** Types de base
** Opérateurs
** Conditions
** Bloc de portée
** Itérations
** Tableaux
* Les classes en Java
** Membres
** Modificateurs d'accès
** Héritage
** Encapsulation
** Polymorphisme
** Classes abstraites
** Interfaces
** Classes internes
** Transtypage
** Types génériques
** Instanciation et cycle de vie
** « this »
** Objets comparables et clés
** Énumérations
** Exceptions
** Packages
* Classes de base
** Collections
** Nombre de taille arbitraire
** Tags Javadoc
** Annotations
** Entrées sorties
** Threads et synchronisation
** Méthodes natives
** Réflexion
** Regex
** JUnit
* Conclusion
* Exemples en Java
** Générer un carré magique
** Générer un triangle de Sierpiński
** XML
** Swing
*** Un premier exemple
*** Formulaire avec boutons sur image
*** Calcul de somme
*** Calcul de distance
* Annexes
** Les outils de base fournis avec le Java Development Kit
** Créer une archive Java
** Paramétrer la JVM
** Liste des mots réservés
** Débogage
** Java et les autres langages
* Introduction
* La notion de machine virtuelle
* Installation
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Premier programme
** Commentaires
** Types de base
** Opérateurs
** Conditions
** Bloc de portée
** Itérations
** Tableaux
* Les classes en Java
** Membres
** Modificateurs d'accès
** Héritage
** Encapsulation
** Polymorphisme
** Classes abstraites
** Interfaces
** Classes internes
** Transtypage
** Types génériques
** Instanciation et cycle de vie
** « this »
** Objets comparables et clés
** Énumérations
** Exceptions
** Packages
* Classes de base
** Collections
** Nombre de taille arbitraire
** Tags Javadoc
** Annotations
** Entrées sorties
** Threads et synchronisation
** Méthodes natives
** Réflexion
** Regex
** JUnit
* Conclusion
* Exemples en Java
** Générer un carré magique
** Générer un triangle de Sierpiński
** XML
** Swing
*** Un premier exemple
*** Formulaire avec boutons sur image
*** Calcul de somme
*** Calcul de distance
* Annexes
** Les outils de base fournis avec le Java Development Kit
** Créer une archive Java
** Paramétrer la JVM
** Liste des mots réservés
** Débogage
** Java et les autres langages
[ Modifier le sommaire ]
Java 5 introduit une nouvelle structure de données appelée énumérations. Cette structure permet de contenir une série de données constantes ayant un type sûr, ce qui veut dire que ni le type, ni la valeur réelle de chaque constante n'est précisé. Il est possible de comparer des valeurs d'une énumération entre elles à l'aide des opérateurs de comparaison et de l'instruction switch.
Exemple :

## Membres

Les énumérations sont en fait compilées sous forme de classes, éventuellement internes.
Une énumération peut donc avoir des constructeurs et méthodes. Ses constructeurs sont obligatoirement privés car aucune nouvelle instance ne peut être créée.

## Héritage

Les énumérations sont compilées sous forme de classes finales, ce qui signifie qu'aucune classe ou énumération ne peut en hériter.

## Méthodes utiles

Les énumérations possèdent des méthodes communes permettant notamment la conversion entre un membre de l'énumération et un entier ou une chaîne de caractères.

### ordinal

    Obtenir l'index de la valeur selon l'ordre de déclaration (premier = 0).
    Exemple : Animal.CHIEN.ordinal /* -> 2 */

### name

    Obtenir le nom de la valeur.
    Exemple : Animal.CHAT.name /* -> "CHAT" */

### valueOf(String s)

    (méthode statique) Obtenir la valeur dont le nom est spécifié en paramètre.
    Exemple : Animal.valueOf("CHAT") /* -> Animal.CHAT */

### values

    (méthode statique) Obtenir un tableau contenant toutes les valeurs déclarées.
    Exemple : Animal.values[2] /* -> Animal.CHIEN */
Les énumérations implémentent l'interface java.lang.Comparable et possède donc les méthodes equals et compare pour comparer deux valeurs (ordonnées selon ordinal par défaut).

## Ensemble de valeurs énumérées

Les ensembles (set en anglais) font partie des classes de collection de l'API Java. Il existe une classe spécifique pour les ensembles de valeurs énumérées nommée EnumSet. Cette classe hérite de la classe abstraite java.util.AbstractSet.
Voir les ensembles.

## Utilisation comme clé de table associative

Étant donné qu'une énumération ne peut avoir d'autres instances que celles déclarées, elle convient bien comme type de clé dans les tables associatives, comme les collections de classe Map. Exemple :