J'utilise l'enum pour créer quelques constantes :
enum ids {OPEN, CLOSE};
la valeur OPEN est de zéro, mais je veux qu'elle soit de 100. Est-ce possible ?
J'utilise l'enum pour créer quelques constantes :
enum ids {OPEN, CLOSE};
la valeur OPEN est de zéro, mais je veux qu'elle soit de 100. Est-ce possible ?
Les enums Java ne sont pas comme les enums C ou C++, qui ne sont en fait que des étiquettes pour les entiers.
Les enums Java sont mis en œuvre plutôt comme des classes - et ils peuvent même avoir plusieurs attributs.
public enum Ids {
OPEN(100), CLOSE(200);
private final int id;
Ids(int id) { this.id = id; }
public int getValue() { return id; }
}
La grande différence est qu'ils sont Sûreté de fonctionnement ce qui signifie que vous n'avez pas à vous soucier de l'affectation d'un enum COLOR à une variable SIZE.
Voir http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html pour plus.
Sur la base de votre déclaration, la meilleure pratique en utilisant Java pour créer un enum d'entiers séquentiels (similaire à un enum C++), pour un index dans un tableau ou autre, serait-elle d'écrire : enum Ids { NAME(0), AGE(1), HEIGHT(2), WEIGHT(3) ; }. Merci, -bn
Oui. Vous pouvez passer les valeurs numériques au constructeur de l'enum, comme suit :
enum Ids {
OPEN(100),
CLOSE(200);
private int value;
private Ids(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
Voir le Guide du langage Sun Java pour plus d'informations.
Cool. Est-il possible de mixer ? C'est-à-dire n'attribuer que des numéros aux valeurs Enum choisies.
Qu'en est-il de l'utilisation de cette méthode :
public enum HL_COLORS{
YELLOW,
ORANGE;
public int getColorValue() {
switch (this) {
case YELLOW:
return 0xffffff00;
case ORANGE:
return 0xffffa500;
default://YELLOW
return 0xffffff00;
}
}
}
il n'y a qu'une seule méthode
vous pouvez utiliser la méthode statique et passer l'Enum comme paramètre comme :
public enum HL_COLORS{
YELLOW,
ORANGE;
public static int getColorValue(HL_COLORS hl) {
switch (hl) {
case YELLOW:
return 0xffffff00;
case ORANGE:
return 0xffffa500;
default://YELLOW
return 0xffffff00;
}
}
Notez que ces deux méthodes utilisent moins de mémoire et plus d'unités de traitement Je ne dis pas que c'est la meilleure méthode mais c'est juste une autre approche.
Si vous utilisez des types d'enum très grands, ce qui suit peut être utile ;
public enum deneme {
UPDATE, UPDATE_FAILED;
private static Map<Integer, deneme> ss = new TreeMap<Integer,deneme>();
private static final int START_VALUE = 100;
private int value;
static {
for(int i=0;i<values().length;i++)
{
values()[i].value = START_VALUE + i;
ss.put(values()[i].value, values()[i]);
}
}
public static deneme fromInt(int i) {
return ss.get(i);
}
public int value() {
return value;
}
}
Si vous voulez émuler l'enum de C/C++ (base num et nexts incrémentaux) :
enum ids {
OPEN, CLOSE;
//
private static final int BASE_ORDINAL = 100;
public int getCode() {
return ordinal() + BASE_ORDINAL;
}
};
public class TestEnum {
public static void main (String... args){
for (ids i : new ids[] { ids.OPEN, ids.CLOSE }) {
System.out.println(i.toString() + " " +
i.ordinal() + " " +
i.getCode());
}
}
}
OPEN 0 100 CLOSE 1 101
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.
0 votes
@ScottF Voulez-vous savoir comment utiliser les enums ?
0 votes
Dans la réponse du haut, il y a une définition d'enum. J'aimerais avoir un exemple de l'utilisation de cette définition dans le code. Par exemple, comment le ctor défini serait utilisé pour créer une instance d'enum avec une valeur entière spécifique.
0 votes
@ScottF si j'étais vous, au lieu de mettre une prime sur ce post, je préfèrerais poster une toute nouvelle question..... ou, lire la documentation sur les enums. Il semble que vous ayez besoin d'acquérir des connaissances de base à ce sujet ;)
0 votes
enum ids {OPEN = 100, CLOSE};
?