Supposons que vous ayez
public enum Week {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
Comment peut-on obtenir int
représentant que dimanche est 0, mercredi 3 etc?
Week week = Week.SUNDAY;
int i = week.ordinal();
Attention cependant, cette valeur changera si vous modifiez l'ordre des constantes enum dans la déclaration. Une façon de contourner ce problème consiste à attribuer soi-même une valeur int à toutes vos constantes enum comme ceci:
public enum Week
{
SUNDAY(0),
MONDAY(1)
private static final Map<Integer,Week> lookup
= new HashMap<Integer,Week>();
static {
for(Week w : EnumSet.allOf(Week.class))
lookup.put(w.getCode(), w);
}
private int code;
private Week(int code) {
this.code = code;
}
public int getCode() { return code; }
public static Week get(int code) {
return lookup.get(code);
}
}
Tu peux appeler:
MONDAY.ordinal()
mais personnellement, je voudrais ajouter un attribut à enum
pour stocker la valeur, l'initialiser dans le constructeur enum
et ajouter une fonction pour obtenir la valeur. Cela est préférable car la valeur de MONDAY.ordinal
peut changer si les constantes enum
sont déplacées.
Jetez un coup d'oeil à l'API c'est généralement un endroit décent pour commencer. Bien que je n’aurais pas deviné sans avoir couru avant cela, vous appelez ENUM_NAME.ordinal ()
Oui, utilisez simplement la méthode ordinale de l’objet enum.
public class Gtry {
enum TestA {
A1, A2, A3
}
public static void main(String[] args) {
System.out.println(TestA.A2.ordinal());
System.out.println(TestA.A1.ordinal());
System.out.println(TestA.A3.ordinal());
}
}
API:
/**
* Returns the ordinal of this enumeration constant (its position
* in its enum declaration, where the initial constant is assigned
* an ordinal of zero).
*
* Most programmers will have no use for this method. It is
* designed for use by sophisticated enum-based data structures, such
* as {@link Java.util.EnumSet} and {@link Java.util.EnumMap}.
*
* @return the ordinal of this enumeration constant
*/
public final int ordinal() {
return ordinal;
}