90 votes

Pourquoi utiliser des Enums plutôt que des constantes ? Qu'est-ce qui est le mieux en termes de conception de logiciels et de lisibilité ?

J'ai un scénario dans lequel j'ai Types de joueurs ARCHER , WARRIOR et sorcerer .
Que dois-je utiliser dans la classe Player pour un type de joueur ?
Constant Final static String ou une variable Enum ? et pourquoi ?
Veuillez m'aider à expliquer pourquoi.

148voto

Jon Skeet Points 692016

Supposons que vous utilisiez des chaînes constantes (ou int il en va de même pour eux) :

// Constants for player types
public static final String ARCHER = "Archer";
public static final String WARRIOR = "Warrior";

// Constants for genders
public static final String MALE = "Male";
public static final String FEMALE = "Female";

vous finissez par ne pas vraiment connaître le type de vos données, ce qui conduit à un code potentiellement incorrect :

String playerType = Constants.MALE;

Si vous utilisez des enums, cela se traduirait par :

// Compile-time error - incompatible types!
PlayerType playerType = Gender.MALE;

De même, les enums donnent un ensemble restreint de valeurs :

String playerType = "Fred"; // Hang on, that's not one we know about...

vs

PlayerType playerType = "Fred"; // Nope, that doesn't work. Bang!

En outre, les enums en Java peuvent être associés à davantage d'informations et peuvent également avoir un comportement. C'est beaucoup mieux.

18voto

Nitin Chhajer Points 1351

Les Enums vous limitent à l'ensemble des entrées requises alors que même si vous utilisez des chaînes constantes, vous pouvez toujours utiliser d'autres chaînes qui ne font pas partie de votre logique.

Cela vous aide à ne pas faire d'erreur, à ne pas saisir quelque chose hors du domaine, lors de la saisie des données et améliore également la lisibilité du programme.

De plus, vous pouvez toujours utiliser vos enums comme String si vous le souhaitez. Voici un exemple de référence .

7voto

NewlessClubie Points 364

En plus de ne pas vous permettre de fournir une valeur incorrecte, il y a encore une autre caractéristique des enums qui peut sembler mineure, mais qui à mon avis est très importante. Les IDE modernes peuvent automatiquement suggérer des valeurs pour les enums, alors qu'il n'y a aucun moyen de déduire de manière fiable les valeurs possibles d'une constante de type chaîne (Intellij IDEA le fait, mais seulement pour les classes JDK et les bibliothèques populaires). Cela est particulièrement utile lorsque vous explorez une nouvelle API.

2voto

Harish Gyanani Points 1160

Il est préférable d'utiliser les Enum pour la sécurité des types. Il est impossible de saisir des valeurs erronées. Mais les enum prennent beaucoup de mémoire dans Android, vous devriez utiliser intdef à la place. Référez-vous à cette réponse pour l'exemple et l'explication:-

Exemple de IntDef/StringDef

Vous pouvez également vérifier le code source d'Android : il remplace les enums par des IntDef/StringDef chaque fois que cela est possible. Ex. View.VISIBLE.

-1voto

Alex Orlov Points 9229

Je vous conseille d'utiliser les enums uniquement si vous avez vraiment besoin de constantes énumérées, ou d'une fonctionnalité supplémentaire commune à tous les éléments.

Cela dépend bien sûr du type d'application que vous écrivez et des versions et appareils que vous souhaitez prendre en charge.

La raison en est que les enums ajoutent des frais généraux car ils allouent des instances de leurs éléments. Vous pouvez remarquer qu'il y a un minimum d'enums dans la plateforme Android, et que presque toutes les constantes sont des ints statiques finaux (comme View.GONE et des choses comme ça).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X