Maison > Java > javaDidacticiel > le corps du texte

Introduction à l'utilisation de l'énumération en Java

黄舟
Libérer: 2017-09-20 10:15:35
original
1789 Les gens l'ont consulté

Cet article présente principalement des informations pertinentes sur l'utilisation détaillée d'enum en Java. J'espère que cet article pourra aider tout le monde à comprendre et à maîtriser l'utilisation d'enum en Java. Les amis dans le besoin peuvent s'y référer

Explication détaillée de la façon d'utiliser enum en java

Le nom complet d'enum est enumeration. Il s'agit d'une nouvelle fonctionnalité introduite dans JDK 1.5 et est stockée dans le package java.lang.

Voici quelques-unes de mes expériences et un résumé de l'utilisation d'enum.

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";
}
Copier après la connexion

Syntaxe (définition)

Utilisez le mot-clé enum pour créer des types d'énumération, ce qui implique que les types créés sont des sous-classes de la classe java.lang.Enum (java.lang.Enum est une classe abstraite). Le type d'énumération est conforme au modèle général Class Enum


package com.hmw.test;
/**
 * 枚举测试类
 * @author <a href="mailto:hemingwang0902@126.com" rel="external nofollow" rel="external nofollow" >何明旺</a>
 */
public enum EnumTest {
  MON, TUE, WED, THU, FRI, SAT, SUN;
}
Copier après la connexion
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);
  ... ...
Copier après la connexion

Opérations courantes telles que le parcours et le changement

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;
    }
  }
}
Copier après la connexion
Résultat de sortie :


MON
TUE
WED
THU
FRI
SAT
SUN
----------------我是分隔线------------------
今天是星期二
Copier après la connexion

Introduction aux méthodes courantes des objets enum

int compareTo (E o)


Compare l'ordre de cette énumération avec l'objet spécifié.

Class 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.

statique


/**
 * Java学习交流QQ群:589809992 我们一起学Java!
 */
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());
  }
}
Copier après la connexion
Résultat de sortie :


TUE 在 MON 之后
getDeclaringClass(): com.hmw.test.EnumTest
name(): TUE
toString(): TUE
ordinal(): 1
Copier après la connexion

Donner Attributs et méthodes personnalisés enum

Ajoutez l'attribut value et la méthode getValue() à l'objet enum :


package com.hmw.test;

/**
 * 枚举测试类
 * 
 * @author <a href="mailto:hemingwang0902@126.com" rel="external nofollow" rel="external nofollow" >何明旺</a>
 */
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());
  }
}
Copier après la connexion
Résultats de sortie :


EnumTest.FRI 的 value = 5
Copier après la connexion

EnumSet, application EnumMap


/**
 * Java学习交流QQ群:589809992 我们一起学Java!
 */
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());
    }
  }
}
Copier après la connexion

Analyse des principes

Bien que la structure syntaxique d'enum soit différente de la syntaxe de class, un fichier de classe est généré après avoir été compilé 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.Enum. Le contenu obtenu après décompilation d'EnumTest (commande javap com.hmw.test.EnumTest) est le suivant :


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);
}
Copier après la connexion
Donc, en fait, enum est une classe, mais le compilateur Java effectue l'analyse syntaxique et la compilation pour nous.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal