67 votes

Puis-je spécifier l'ordinal pour enum (java)?

La méthode ordinal () peut obtenir l'ordinal d'une instance enum. Comment puis-je définir l'ordinal pour une enum?

83voto

Matt Points 953

Vous pouvez contrôler l'ordinal en modifiant l'ordre de l'énum, mais vous ne pouvez pas le définir explicitement comme dans C++ . Une solution de contournement consiste à fournir une méthode supplémentaire dans votre enum pour le nombre souhaité:

 enum Foo {
  BAR(3),
  BAZ(5);
  private final int val;
  private Foo(int v) { val = v; }
  public int getVal() { return val; }
}
 

Dans cette situation, BAR.ordinal() == 0 , mais BAR.getVal() == 3 .

62voto

Bozho Points 273663

Vous ne pouvez pas le définir. C'est toujours l'ordinal de la définition de constante. Voir la documentation pour les Enum.ordinal():

Renvoie le nombre ordinal de cette énumération constante (sa position dans sa déclaration d'enum, où la première constante est attribué un nombre de zéro). La plupart des programmeurs auront pas l'usage de cette méthode. Il est conçu pour une utilisation sophistiquée enum basé sur des structures de données, telles que EnumSet et EnumMap.

Et de fait - vous ne devez pas. Si vous voulez de la propriété integer, en définir un.

4voto

Sllouyssgort Points 130

Vous pouvez mettre à jour l'ordinal en utilisant la réflexion:

 private void setEnumOrdinal(Enum object, int ordinal) {
    Field field;
    try {
        field = object.getClass().getSuperclass().getDeclaredField("ordinal");
        field.setAccessible(true);
        field.set(object, ordinal);
    } catch (Exception ex) {
        throw new RuntimeException("Can't update enum ordinal: " + ex);
    }
}
 

2voto

SJuan76 Points 16867

À partir de http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.html

public final int ordinal()Retourne l'ordinal de cette énumération constante (sa position dans sa déclaration d'enum, où la première constante est attribué un nombre de zéro). La plupart des programmeurs auront pas l'usage de cette méthode. Il est conçu pour une utilisation sophistiquée enum basé sur des structures de données, telles que EnumSet et EnumMap.

Retourne: l'ordinal de cette énumération constante

Si vous avez

public enum Jour { DIMANCHE, LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI }

puis DIMANCHE a une ordinale de 0, LUNDI, c'est 1, et ainsi de suite...

0voto

Piyush Points 6137

Découvrez la Java Enum exemples et docs

Renvoie le nombre ordinal de cette énumération constante (sa position dans sa déclaration d'enum, où la première constante est attribué un nombre de zéro). La plupart des programmeurs auront pas l'usage de cette méthode. Il est conçu pour une utilisation sophistiquée enum basé sur des structures de données, telles que EnumSet et EnumMap.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X