Le type ENUM est une nouvelle fonctionnalité dans la version 1.5.0 langage Java, conçu pour résoudre les faiblesses dans la façon dont les valeurs énumérées ont été traitées dans les versions précédentes de Java . À la base , il adopte une structure similaire à celle du type ENUM dans les langues basés sur C , mais il est beaucoup plus puissant . Le Enum objet
Avant de passer à eux-mêmes énumérations , il vaut mieux pour illustrer le problème que le nouveau type ENUM a été créé à résoudre. Considérons la classe suivante:
Calendrier public class {
int dayOfWeek GO
public int static final lundi = 0
GO public static final int mardi = 1
GO public static final int mercredi = 2
GO ....
setDayOfWeek void (int date) {... } }
Cette classe stocke le jour de la semaine en utilisant un ensemble de constantes énumérées à valeurs entières de 0-7 , chacune correspondant à un jour différent , et il est prévu que d'autres développeurs qui utilisent cette classe vont utiliser ces constantes lorsque vous utilisez la classe. Cependant, rien applique cela. D'autres classes peuvent ignorer les constantes , d'utiliser leurs propres constantes (en commençant par dimanche , peut-être) par erreur, ou même , à la suite d'un bug , passer \\ " 8 \\" comme un jour de la semaine , permettant potentiellement à un bug à se propager plus loin que ce qu'elle devrait . Il est également particulièrement peu informatif pour le débogage , la valeur de \\ " dayOfWeek \\" sera imprimé sur la console ou à un débogueur simplement comme un entier qui doit être examiné dans le code source . Les énumérations sont conçus pour répondre à toutes ces questions. Ce qui suit est la même classe, en utilisant le type d'énumération au lieu d'un ensemble de constantes énumérées :
classe Calendar publique {
public enum jours { lundi , mardi, mercredi , jeudi, vendredi , samedi, dimanche
}
Day dayOfWeek
vide setDayOfWeek (jour J ) {... } }
Le code ci-dessus, en plus d'être propre et plus lisible , aborde tous les problèmes mentionnés ci-dessus avec constantes énumérées . Les clients sont maintenant obligés d'utiliser uniquement les valeurs énumérées eux-mêmes , et débogueurs montrer le nom de l' énumération valeur et non un entier. En outre, les énumérations ont un certain nombre d'autres avantages. Par exemple, ils peuvent être utilisés avec la nouvelle for-each fonction de boucle qui a été ajoutée dans Java 1.5.0. La classe Calendar pourrait inclure la méthode comme ceci:
printDays void () {
pour ( Jour J : Day.values ()) {
System.out.println ("Aujourd'hui " + d)
GO } }
Cette méthode va parcourir tous les jours et imprimer leurs noms .
Enums sont des classes à part entière , ce qui signifie qu'ils peuvent avoir leurs propres méthodes et des constructeurs . Prenons l' énumération qui suit , qui stocke les personnages dans un jeu , ce qui permet avec une brève description de ce personnage :
public enum caractères {
MYSTERIOUS_MAN ( " Tall, dark et beau. " ) ,
MYSTERIOUS_WOMAN (« Vêtue d'une robe rouge. " ) ,
PROTAGONISTE ( " Dashing et héroïque. " ) ,
ANTAGONISTE (« Débordant de mal . ");
Chaîne Description GO
caractères ( String description ) {
this.description = Description
GO } }