La méthode ordinal () peut obtenir l'ordinal d'une instance enum. Comment puis-je définir l'ordinal pour une enum?
Réponses
Trop de publicités? 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
.
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.
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);
}
}
À 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...
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.