Préface
Dans notre programmation quotidienne, il existe souvent de tels "ensembles de données", dont les valeurs sont stables dans le programme, et les éléments des "ensembles de données" sont limités. Par exemple, sept éléments de données du lundi au dimanche forment un "ensemble de données" d'une semaine et quatre éléments de données du printemps, de l'été, de l'automne et de l'hiver un "ensemble de données" des quatre saisons. Comment mieux utiliser ces "ensembles de données" en Java? Par conséquent, l'énumération est utile
L'énumération est en fait un type, similaire à INT et CHAR, ce qui signifie qu'il restreint les entrées lors de la définition des variables. Vous ne pouvez affecter que les valeurs spécifiées dans ENUM.
Mise en œuvre de l'énumération
JDK5 fournit la mise en œuvre des types d'énumération Java, qui est plus syntaxique qu'un nouveau type.
Saison publique en énumération {printemps, été, automne, hiver}Voyons comment ce code est implémenté via l'outil de décompilation. Le code décompilé est le suivant:
La saison publique de classe finale étend ENUM {Saison statique publique [] valeurs () {return (saison []) $ valeurs.clone (); } Valeur de la saison statique publique (String S) {retour (saison) enum.valueof (saison, s); } saison privé (String S, int i) {super (s, i); } Public Static Final Season Spring; Été final statique publique; Automne publique statique de la saison statique; L'hiver final de la finale statique statique; Saison finale statique privée $ Valeurs []; statique {printemps = nouvelle saison ("printemps", 0); Été = nouvelle saison ("Summer", 1); Automne = nouvelle saison ("automne", 2); Hiver = nouvelle saison ("hiver", 3); $ Valeurs = (nouvelle saison [] {printemps, été, automne, hiver}); }} En décompilant le code, vous pouvez trouver:
1. Season est une classe ordinaire qui hérite de Enum et est modifiée par final pour éviter l'héritage.
2. SPRING , SUMMER , AUTUMN et WINTER dans l'énume sont des cas statiques de Season et sont initialisés dans la méthode du constructeur de classe <clinit> .
3. values() renvoie une copie de la variable privée $VALUES[] $VALUES[] , qui est également initialisée dans <clinit> .
Comment utiliser Enum
1. Mode singleton
Nous savons déjà que le constructeur de classe <clinit> ne peut être exécuté que par un seul thread pendant l'étape d'initialisation de la charge de classe, donc chaque instance de l'énumération a et une seule copie dans le tas Java. Cette fonctionnalité permet à l'énumération d'implémenter facilement le modèle Singleton. C'est exactement l'efficacité de l'auteur de Java, Josh Bloch, préconise l'utilisation de la mise en œuvre des modèles Singleton.
Singleton en énum public {instance;} 2. Utiliser dans Switch
3. Champs et méthodes personnalisés
En plus des champs et méthodes par défaut dans les énumérations, vous pouvez personnaliser pour la logique métier.
public Enum enumTest {Plus ("+") {@Override public int bind (int arg1, int arg2) {return arg1 + arg2; }}, Sub ("-") {@Override public int bind (int arg1, int arg2) {return arg1 - arg2; }}; opération de chaîne finale; EnumTest (String Operation) {this.operation = opération; } Résumé int bind (int arg1, int arg2);}4. Implémentez l'interface
Interface Operation {int opération (int arg1, int arg2);} public Enum enumTest implémente l'opération {plus ("+") {@Override public int opération (int arg1, int arg2) {return arg1 + arg2; }}, Sub ("-") {@Override public int opération (int arg1, int arg2) {return arg1 - arg2; }}; opération de chaîne finale; EnumTest (String Operation) {this.operation = opération; }} Dans les applications pratiques, "+" et "-" peuvent être utilisés comme clés, plus et sous comme value , et les préserver dans le hashmap dans hashMap . La méthode d'utilisation spécifique est la suivante:
Operation Operation = hashmap.get ("+"); int result = operation.bind (1, 2);Résumer
Ce qui précède est tout au sujet des types d'énumération en Java. J'espère que grâce à l'introduction de cet article aux Enum in Java, cela peut être utile à tout le monde. Si vous avez des questions, veuillez laisser un message pour communiquer.