2012-07-09 2 views
10

Après avoir lu quelques questions et réponses à propos de enum je ne trouve pas vraiment utile ...À quoi sert Enum?

C'est quelque chose entre la classe et une variable, mais je sais où puis-je l'utiliser de sorte qu'il serait plus utile qu'un cours, ou quelques variables par exemple.

+6

http://stackoverflow.com/questions/481068/when-to-use-enum-or-collection-in-java – Habib

+1

http://stackoverflow.com/questions/2077634/enum-in-java-avantages – assylias

Répondre

32

Il y a d'autres choses que vous pouvez faire et des raisons de les utiliser, mais la principale raison pour laquelle j'utilise enums est d'empêcher la possibilité d'un paramètre invalide. Par exemple, imaginez la méthode suivante:

public void doSomethingWithAMonth(int monthNum); 

Ceci est non seulement ambiguë (? Ne index mois commencent à 1 ou à 0), mais vous pouvez donner des données invalides en bas à droite (13+, nombres négatifs) . Si vous avez un ENUM Month avec Jan, la FEB, etc. la signature devient:

public void doSomethignWithAMonth(Month month); 

code appelant cette méthode sera beaucoup plus facile à lire, et ne peut fournir des données non valides.

+1

Merci! Maintenant, je pense que je comprends un peu mieux :) –

+1

C'est un exemple simple et bon – njfife

2

Comme le nom "enum", il est idéal pour les constantes d'énumération, qui fournissent des fonctionnalités étendues. Comme par exemple vous pouvez stocker quelques constantes comprenant de plusieurs paramètres comme: constantId, constanNameString, params supplémentaires. De plus, enum peut contenir des fonctions.

Une utilisation exotique d'enum est de faire un singleton.

4

Un enum force les codeurs à sélectionner à partir d'une liste prédéfinie d'entités ou de concepts. Bien que vous puissiez atteindre le même objectif avec des classes ou définir une variable sur une valeur connue particulière, une énumération est moins sujette aux erreurs car elle annonce et applique un menu à partir duquel l'auteur d'une valeur peut choisir.

4

Un Énum est utile pour empêcher les gens de faire des choses qu'ils ne devraient pas faire. Par exemple, si j'ai:

public final static int WEATHER_SUNNY = 0; 
public final static int WEATHER_RAINY = 1; 
public final static int WEATHER_HAIL = 2; 

alors je peux faire: MyClass.WEATHER_SUNNY + MyClass.WEATHER_HAIL qui n'a pas de sens. C'est pourquoi il est préférable d'avoir une météo enumée. Cela rend le code plus lisible et interdit la sommation de deux entiers météorologiques.

+0

Je ne suis pas un grand fan de cet exemple si seulement parce que je pense qu'il encourage la pensée étroite. Il n'y a aucune raison que différents types de temps comme celui-ci ne puissent pas se chevaucher, en fait, ils le font souvent. – Thor84no

+0

@ Thor84no: merci pour votre commentaire. Cependant, tout dépend du domaine et de l'application, ce qui signifie «encourager une pensée étroite». ne semble pas approprié. –

10

J'utilise Enums pour tout ce qui a plusieurs "types" de quelque chose. C'est-à-dire des jours d'une semaine. Pourquoi je n'utilise pas String dans ce cas est parce que je ne peux pas faire l'instruction switch sur la chaîne et je peux sur Enum donc pour chaque jour de la semaine je peux faire quelque chose de spécifique.

J'utilise aussi Enum lorsque vous travaillez avec un singleton, Vérifiez le Effective Java book CH2(CHAPTER 2 CREATING AND DESTROYING OBJECTS), je cite:

« Bien que cette approche n'a pas encore être largement adopté, un type enum seul élément est la meilleure façon de mettre en œuvre un singleton " ne va pas coller le code lu le livre c'est excellent.

Si j'étais vous, je voudrais d'abord lire Thinking in java chapitre des types énumérés. Puis après que le chapitre 6 de Java efficace et vous devriez être bon

2

Enum est utile quand vous avez une liste de valeurs qui sont fonctionnellement significatives et finies. Dites par exemple que vous devez utiliser un jour de la semaine: un autre jour ne sera pas ajouté et vous préférez avoir le jour.LUNDI dans votre code plutôt qu'un nombre et avoir à se rappeler que 0 est lundi, 1 est mardi et ainsi de suite. Il fait une déclaration de commutation plus facile à comprendre aussi, avec:

Switch(day) { 
    case Monday : ... break; 
    case Tuesday : ... break 
    etc. 
} 
3

Je voudrais ajouter aux autres réponses que les énumérations sont classes qui ont seulement un nombre fixe d'instances. Ces instances peuvent avoir des champs et des méthodes et être utilisées comme tout autre objet Java. Par exemple, le Month ENUM pourrait définir des méthodes comme

public int getNumberOfDays(int year); 
public boolean isFirstOfYear(); 
7

Définition Simplest - An enum is just like any other class, with a predefined set of instances.

La meilleure partie de ENUM est qu'il peut être utilisé dans les états de commutation où nous ne pouvons pas utiliser des chaînes. Et Enum est un type de sécurité, donc vous ne pouvez pas attribuer de nouvelle valeur au moment de l'exécution.

+1

Juste pour ceux qui rencontrent cela, à partir de Java 7, il n'est plus vrai que vous ne pouvez pas utiliser 'String's dans les instructions' switch'. http://docs.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html – Thor84no