Implémentation de toString sur les énumérations Java
Il semble possible en Java d'écrire quelque chose comme ceci:
private enum TrafficLight {
RED,
GREEN;
public String toString() {
return //what should I return here if I want to return
//"abc" when red and "def" when green?
}
}
Maintenant, j'aimerais savoir s'il est possible de retourner dans la méthode toString "abc" lorsque la valeur de l'énumération est Rouge et "def" quand elle est verte. Aussi, est-il possible de faire comme en C#, où vous pouvez faire cela?:
private enum TrafficLight {
RED = 0,
GREEN = 15
...
}
J'ai essayé ceci mais mais je reçois des erreurs de compilateur avec.
Merci
3 réponses
Sna 1:
enum TrafficLight {
RED,
GREEN;
@Override
public String toString() {
switch(this) {
case RED: return "abc";
case GREEN: return "def";
default: throw new IllegalArgumentException();
}
}
}
Sna 2:
enum TrafficLight {
RED(0),
GREEN(15);
int value;
TrafficLight(int value) { this.value = value; }
}
, Vous pouvez le faire comme suit:
private enum TrafficLight {
// using the constructor defined below
RED("abc"),
GREEN("def");
// Member to hold the name
private String string;
// constructor to set the string
TrafficLight(String name){string = name;}
// the toString just returns the given name
@Override
public String toString() {
return string;
}
}
Vous pouvez ajouter autant de méthodes et de membres que vous le souhaitez. Je crois que vous pouvez même ajouter plusieurs constructeurs. Tous les constructeurs doivent être private
.
Un enum
en Java est fondamentalement un class
qui a un nombre défini d'instances.
Aussi, si vous avez besoin d'obtenir une valeur de chaîne en minuscules d'enum ("rouge", "vert"), vous pouvez le faire comme suit:
private enum TrafficLight {
RED,
GREEN;
@Override
public String toString() {
return super.toString().toLowerCase();
}
}