Supposons que vous ayez
public enum Week {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
Comment peut-on obtenir int
représentant que le dimanche est 0, le mercredi est 3, etc.
Supposons que vous ayez
public enum Week {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
Comment peut-on obtenir int
représentant que le dimanche est 0, le mercredi est 3, etc.
Week week = Week.SUNDAY;
int i = week.ordinal();
Attention toutefois, cette valeur changera si vous modifiez l'ordre des constantes de l'enum dans la déclaration. Une façon de contourner ce problème est d'attribuer 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);
}
}
Vous pouvez appeler :
MONDAY.ordinal()
mais personnellement, j'ajouterais un attribut à l'attribut enum
pour stocker la valeur, l'initialiser dans l'objet enum
et ajoutez une fonction pour obtenir la valeur. C'est mieux car la valeur de MONDAY.ordinal
peut changer si le enum
Les constantes sont déplacées.
Jetez un coup d'œil à l'API c'est généralement un bon point de départ. Bien que je n'aurais pas deviné, sans avoir rencontré ce problème auparavant, que vous appelez ENUM_NAME.ordinal().
Oui, il suffit d'utiliser le ordinal 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;
}
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.