English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Utilisation de Java enum
Utilisation une : constantes
Dans JDK1.5 Avant, nous définissions les constantes ainsi : public static final.... . Maintenant, avec les enums, nous pouvons regrouper les constantes liées dans un type d'enum, et les enums offrent plus de méthodes que les constantes.
public enum Color { ROUGE, VERT, VIDE, JAUNE }
Utilisation deux : switch
JDK1.6L'ancien switch ne supportait que les types int, char, enum. L'utilisation des enums rend notre code plus lisible.
enum Signal { VERT, JAUNE, ROUGE } public class TrafficLight { Signal color = Signal.RED; public void change() { switch (color) { case RED: color = Signal.GREEN; break; case YELLOW: color = Signal.RED; break; case GREEN: color = Signal.YELLOW; break; } } }
Utilisation troisième : ajouter une nouvelle méthode à l'enum
Si vous envisagez de définir vos propres méthodes, vous devez ajouter un point-virgule à la fin de la séquence d'instances enum. De plus, Java exige que les instances enum soient définies en premier.
public enum Color { RED("rouge", 1), GREEN("vert", 2), BLANK("blanc", 3), YELLO("jaune", 4); // 成员变量 private String name; private int index; // Constructeur private Color(String name, int index) { this.name = name; this.index = index; } // Méthode ordinaire public static String getName(int index) { for (Color c : Color.values()) { if (c.getIndex() == index) { return c.name; } } return null; } // get set méthodes public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
Utilisation quatrième : couvrir les méthodes d'enum
Voici un exemple de couverture de la méthode toString().
public class Test { public enum Color { RED("rouge", 1), GREEN("vert", 2), BLANK("blanc", 3), YELLO("jaune", 4); // 成员变量 private String name; private int index; // Constructeur private Color(String name, int index) { this.name = name; this.index = index; } // Méthode couverte @Override public String toString() { return this.index + "_" + this.name; } } public static void main(String[] args) { System.out.println(Color.RED.toString()); } }
Utilisation cinquième : implémenter l'interface
Tous les enums héritent de la classe java.lang.Enum. Comme Java ne supporte pas la surcharge multiple, les objets enums ne peuvent pas hériter d'autres classes.
public interface Behaviour { void print(); String getInfo(); } public enum Color implements Behaviour { RED("rouge", 1), GREEN("vert", 2), BLANK("blanc", 3), YELLO("jaune", 4); // 成员变量 private String name; private int index; // Constructeur private Color(String name, int index) { this.name = name; this.index = index; } // Méthode de l'interface @Override public String getInfo() { return this.name; } // Méthode de l'interface @Override public void print() { System.out.println(this.index + ":" + this.name); } }
Utilisation six : utilisation de l'interface pour organiser les enums
public interface Food { enum Coffee implements Food { BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO } enum Dessert implements Food { FRUIT, CAKE, GELATO } }
Utilisation sept : concernant l'utilisation des collections d'enum
java.util.EnumSet et java.util.EnumMap sont deux collections d'enum. EnumSet garantit que les éléments de la collection ne sont pas redondants; dans EnumMap, la clé est de type enum, tandis que la valeur peut être de n'importe quel type. Concernant l'utilisation de ces deux collections, cela ne sera pas développé ici, vous pouvez consulter la documentation JDK.
La différence entre l'enum et la définition des constantes
Première partie : méthode de définition des constantes
Nous utilisons généralement les méthodes public final static pour définir le code suivant, en utilisant1Représente le feu rouge,3Représente le feu vert,2Représente le feu jaune.
public class Light { /* Feu rouge */ public final static int RED = 1; /* Feu vert */ public final static int GREEN = 3; /* Feu jaune */ public final static int YELLOW = 2; }
Deuxième partie : méthode de définition des constantes du type enum
La méthode simple de définition du type enum est la suivante, nous ne pouvons pas définir chaque valeur du type enum. Par exemple, le code pour définir les feux rouges, verts et jaunes pourrait être le suivant :
public enum Light { RED, GREEN, YELLOW; }
Nous ne pouvons représenter que les feux rouges, verts et jaunes, mais nous ne pouvons pas exprimer les valeurs spécifiques. Ne vous inquiétez pas, puisque le type enum fournit un constructeur, nous pouvons réaliser cela à l'aide du constructeur et de la surcharge de la méthode toString.Tout d'abord, ajoutons une méthode de construction au type enum Light, puis chaque valeur du type enum est transmise aux paramètres correspondants via le constructeur, et la méthode toString est surchargée, dans laquelle les paramètres transmis par le constructeur sont retournés. Le code après transformation est le suivant :
public enum Light { // 13), YELLOW(2); // Définition de la variable privée private int nCode; // Constructeur, le type d'enumère ne peut être privé private Light(int _nCode) { this.nCode = _nCode; } @Override public String toString() { return String.valueOf(this.nCode); } }
Troisième partie, exemple complet du code
Le code complet du type d'enumère est présenté ci-dessous :
public class LightTest { // 1.Définition du type d'enumère public enum Light { // 13), YELLOW(2); // Définition de la variable privée private int nCode; // Constructeur, le type d'enumère ne peut être privé private Light(int _nCode) { this.nCode = _nCode; } @Override public String toString() { return String.valueOf(this.nCode); } } /** * * @param args */ public static void main(String[] args) { // 1.Traversée des types d'enumères System.out.println("Démo de la traversée des types d'enumères ......"); testTraversalEnum(); // 2.Démo de l'utilisation de l'objet EnumMap System.out.println("Démo de l'utilisation et de la traversée de l'objet EnumMap....."); testEnumMap(); // 3.Démo de l'utilisation d'EnumSet System.out.println("Démo de l'utilisation et de la traversée de l'objet EnumSet....."); testEnumSet(); } /** * * Démo de la traversée des types d'enumères */ private static void testTraversalEnum() { Light[] allLight = Light.values(); for (Light aLight : allLight) { System.out.println("Nom de la lampe actuelle : ", + aLight.name()); System.out.println("Ordinal de la lampe actuelle : ", + aLight.ordinal()); System.out.println("Lampe actuelle : ", + aLight); } } /** * * Démo de l'utilisation d'EnumMap, l'utilisation d'EnumMap est comparable à celle de HashMap, mais le type de clé doit être de type枚举 */ private static void testEnumMap() { // 1.Démo de la définition de l'objet EnumMap, le constructeur de l'objet EnumMap nécessite des paramètres d'entrée, par défaut, c'est le type de la classe de la clé EnumMap<Light, String> currEnumMap = new EnumMap<Light, String>( Light.class); currEnumMap.put(Light.RED, "feu rouge"); currEnumMap.put(Light.GREEN, "feu vert"); currEnumMap.put(Light.YELLOW, "feu jaune"); // 2. Parcourir l'objet for (Light aLight : Light.values()) { System.out.println("[key=" + aLight.name() + ",value=" + currEnumMap.get(aLight) + "); } } /** * * Démonstration de l'utilisation de l'EnumSet, l'EnumSet est une classe abstraite, obtient le contenu des types d'énumérations d'un type <BR/> * * Il est possible d'utiliser la méthode allOf */ private static void testEnumSet() { EnumSet<Light> currEnumSet = EnumSet.allOf(Light.class); for (Light aLightSetElement : currEnumSet) { System.out.println("Les données actuelles de l'EnumSet sont : " + aLightSetElement); } } }
Le résultat de l'exécution est le suivant :
Démonstration de la navigation d'un type d'énumération ......
Nom de la lampe actuelle : RED
Ordinal de la lampe actuelle : 0
Lampe actuelle :1
Nom de la lampe actuelle : GREEN
Ordinal de la lampe actuelle :1
Lampe actuelle :3
Nom de la lampe actuelle : YELLOW
Ordinal de la lampe actuelle :2
Lampe actuelle :2
Démonstration de l'utilisation et de la navigation de l'objet EnmuMap.....
[key=RED,value=feu rouge]
[key=GREEN,value=feu vert]
[key=YELLOW,value=feu jaune]
Démonstration de l'utilisation et de la navigation de l'objet EnmuSet.....
Les données actuelles de l'EnumSet sont :1
Les données actuelles de l'EnumSet sont :3
Les données actuelles de l'EnumSet sont :2
Quatrièmement, la différence entre les méthodes de définition des constantes habituelles et les méthodes de définition des constantes des énumérations
Le contenu suivant peut être un peu ennuyeux, mais il en vaut vraiment la peine de jeter un coup d'œil
1. Code :
public class State { public static final int ON = 1; public static final Int OFF= 0; }
Qu'y a-t-il de mal, tout le monde l'a utilisé pendant une longue période, il n'y a pas de problème.
Premièrement, ce n'est pas sécurisé au niveau du type. Vous devez vous assurer qu'il s'agit d'un int
Deuxièmement, vous devez également vous assurer que son intervalle est de 0 et1
Enfin, souvent, lorsque vous l'imprimez, vous ne voyez que 1 et 0 ,
Mais ceux qui ne voient pas le code ne savent pas de quoi il s'agit, jetez tous vos anciens constants public static final
2. Vous pouvez créer une classe enum, la considérer comme une classe ordinaire. Sauf qu'elle ne peut pas hériter d'autres classes. (Java est héréditaire en mono, il l'a déjà hérité de Enum),
Vous pouvez ajouter d'autres méthodes, en surchargeant celles de l'objet lui-même
3. Le paramètre switch() peut utiliser enum
4. La méthode values() est insérée par le compilateur dans la définition de enum static, donc, lorsque vous转型z une instance enum en Enum, values() n'est plus accessible. Solution : dans la classe, il y a une méthode getEnumConstants(), donc même si l'interface Enum n'a pas de méthode values(), nous pouvons toujours obtenir toutes les instances enum via l'objet Class
5. Il n'est pas possible de hériter de sous-classes de enum, si vous avez besoin d'extension des éléments de l'enum, créez une enum qui implémente une interface à l'intérieur d'une classe, ce qui permet de regrouper les éléments. Cela permet de regrouper les éléments de l'enum.
6. Utilisez EnumSet à la place des drapeaux. Enum nécessite que ses membres soient uniques, mais les éléments de l'enum ne peuvent pas être supprimés ou ajoutés.
7. La clé de EnumMap est enum, la valeur est n'importe quel autre objet Object.
8. Enum permet aux programmeurs d'écrire des méthodes pour des instances enum. Donc, chaque instance enum peut avoir des comportements différents.
9. Utilisation de la chaîne de responsabilité enum (Chain of Responsibility). Cela concerne le patron de conception de la chaîne de responsabilité. Résolvez un problème de plusieurs façons différentes, puis liez-les ensemble. Lorsqu'une demande arrive, itérativez à travers cette chaîne jusqu'à ce qu'un élément de solution puisse traiter la demande.
10. Utilisation de l'état machine enum.
11. Utilisation de la distribution multiple via enum.
Merci de lire, j'espère que cela pourra aider tout le monde, merci pour le soutien à notre site !