Maison > Java > javaDidacticiel > le corps du texte

Résumé du nœud Java enumeration_Power

Y2J
Libérer: 2017-05-02 14:52:55
original
1798 Les gens l'ont consulté

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

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

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)
Copier après la connexion

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

Class<E> getDeclaringClass()
Copier après la connexion

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.

static>

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

MAR après LUN

getDeclaringClass(): com.hmw.test.EnumTest
name(): TUE
toString(): TUE
ordinal(): 1
Copier après la connexion
Donner 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());
  }
}
Copier après la connexion

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());
    }
  }
}
Copier après la connexion
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.Enum. 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);
}
Copier après la connexion

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!