Le nom complet d'enum est énumération. Il s'agit d'une nouvelle fonctionnalité introduite dans JDK 5 et est stockée dans le package java.lang. Cet article vous présentera les connaissances liées à l'énumération Java. Les amis qui en ont besoin peuvent s'y référer
Le nom complet de l'énumération est énumération. Il s'agit d'une nouvelle fonctionnalité introduite dans le JDK 5 et est stockée dans Java. Paquet .lang.
Constantes de définition de l'interface originale
public interface IConstants { String MON = "Mon"; String TUE = "Tue"; String WED = "Wed"; String THU = "Thu"; String FRI = "Fri"; String SAT = "Sat"; String SUN = "Sun"; }
Syntaxe (Définition)
Pour créer un type d'énumération, utilisez l'énumération key Le mot implique que les types créés sont des sous-classes de la classe java.lang.Enum (java.lang.Enum est une classe abstraite). Les types d'énumération sont conformes au modèle général Class Enum5eaf204136788f9453aa5ddf6b5cc332>, où E représente le nom du type d'énumération. Chaque valeur du type énumération sera mappée au constructeur protégé Enum(String name, int ordinal), où le nom de chaque valeur est converti en chaîne et le paramètre ordinal représente le paramètre dans lequel ce paramètre a été créé.
package com.bjpowernode.test; /** * 枚举测试类 */ public enum EnumTest { MON, TUE, WED, THU, FRI, SAT, SUN; }
Ce code appelle en fait Enum (String name, int ordinal) 7 fois :
new Enum<EnumTest>("MON",0); new Enum<EnumTest>("TUE",1); new Enum<EnumTest>("WED",2); ... ...
Opérations courantes telles que le parcours et le commutateur
Exemple de code pour parcourir et changer d'énumérations :
public class Test { public static void main(String[] args) { for (EnumTest e : EnumTest.values()) { System.out.println(e.toString()); } System.out.println("----------------我是分隔线------------------"); EnumTest test = EnumTest.TUE; switch (test) { case MON: System.out.println("今天是星期一"); break; case TUE: System.out.println("今天是星期二"); break; // ... ... default: System.out.println(test); break; } } }
Résultat de sortie :
MON
MAR
MER
JEU
VEN
SAT
SOLEIL
----------------Je suis le diviseur---------------- --
Aujourd'hui, c'est mardi
Introduction aux méthodes courantes d'objets enum
int compareTo(E o)
Comparez l'ordre de cette énumération avec l'objet spécifié.
Class<E> getDeclaringClass()
Renvoie l'objet Class correspondant au type d'énumération de cette constante d'énumération.
String name()
Renvoie le nom de cette constante d'énumération, tel que déclaré dans sa déclaration d'énumération.
int ordinal()
Renvoie l'ordinal d'une constante d'énumération (sa position dans la déclaration d'énumération où l'ordinal de constante initiale est zéro).
String toString()
Renvoie le nom de la constante enum, tel que contenu dans la déclaration.
staticf7aab138c054fc7a09467b4c0b8e56e0>
Résultat de sortie :public class Test { public static void main(String[] args) { EnumTest test = EnumTest.TUE; //compareTo(E o) switch (test.compareTo(EnumTest.MON)) { case -1: System.out.println("TUE 在 MON 之前"); break; case 1: System.out.println("TUE 在 MON 之后"); break; default: System.out.println("TUE 与 MON 在同一位置"); break; } //getDeclaringClass() System.out.println("getDeclaringClass(): " + test.getDeclaringClass().getName()); //name() 和 toString() System.out.println("name(): " + test.name()); System.out.println("toString(): " + test.toString()); //ordinal(), 返回值是从 0 开始 System.out.println("ordinal(): " + test.ordinal()); } }
MAR après LUN
getDeclaringClass(): com.hmw.test.EnumTest name(): TUE toString(): TUE ordinal(): 1Donner les propriétés et méthodes personnalisées de l'énumération
Ajouter le value et la méthode getValue() à l'objet enum :
Résultat de sortie :package com.bjpowernode.test; /** * 枚举测试类 * */ public enum EnumTest { MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) { @Override public boolean isRest() { return true; } }, SUN(0) { @Override public boolean isRest() { return true; } }; private int value; private EnumTest(int value) { this.value = value; } public int getValue() { return value; } public boolean isRest() { return false; } } public class Test { public static void main(String[] args) { System.out.println("EnumTest.FRI 的 value = " + EnumTest.FRI.getValue()); } }
EnumTest.FRI 的 value = 5 EnumSet,EnumMap 的应用 public class Test { public static void main(String[] args) { // EnumSet的使用 EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class); for (EnumTest day : weekSet) { System.out.println(day); } // EnumMap的使用 EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class); weekMap.put(EnumTest.MON, "星期一"); weekMap.put(EnumTest.TUE, "星期二"); // ... ... for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) { Entry<EnumTest, String> entry = iter.next(); System.out.println(entry.getKey().name() + ":" + entry.getValue()); } } }Analyse des principes
Bien que la syntaxe La structure de l'énumération est différente de la syntaxe de la classe, un fichier de classe est généré après compilation par le compilateur. Après avoir décompilé le fichier de classe, vous pouvez voir qu'une classe est réellement générée, qui hérite de java.lang.Enum1a4db2c2c2313771e5742b6debf617a1. Le contenu obtenu après décompilation d'EnumTest (commande javap com.hmw.test.EnumTest) est le suivant :
Donc, en fait, enum est une classe, mais le compilateur Java nous aide à faire la syntaxe Il suffit d'analyser et de compiler.public class com.hmw.test.EnumTest extends java.lang.Enum{ public static final com.hmw.test.EnumTest MON; public static final com.hmw.test.EnumTest TUE; public static final com.hmw.test.EnumTest WED; public static final com.hmw.test.EnumTest THU; public static final com.hmw.test.EnumTest FRI; public static final com.hmw.test.EnumTest SAT; public static final com.hmw.test.EnumTest SUN; static {}; public int getValue(); public boolean isRest(); public static com.hmw.test.EnumTest[] values(); public static com.hmw.test.EnumTest valueOf(java.lang.String); com.hmw.test.EnumTest(java.lang.String, int, int, com.hmw.test.EnumTest); }Résumé
Vous pouvez considérer enum comme une classe ordinaire. Ils peuvent tous définir certaines propriétés et méthodes. La différence est la suivante : enum ne peut pas utiliser le mot-clé extends Inherit. d'autres classes, car enum a hérité de java.lang.Enum (java est un héritage unique).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!