J'ai un enum qui ressemble à:
public enum Constants{
YES("y"), NO("N")
private String value;
Constants(String value){
this.value = value;
}
}
J'ai une classe de test qui ressemble à
public class TestConstants{
public static void main(String[] args){
System.out.println(Constants.YES.toString())
System.out.println(Constants.NO.toString())
}
}
La sortie est:
YES
NO
au lieu de
Y
N
Je ne suis pas sûr de ce qui ne va pas ici ??
Vous devez remplacer la méthode toString
de votre enum:
public enum Constants{
YES("y"), NO("N")
// No changes
@Override
public String toString() {
return value;
}
}
Ecrivez Getter et Setter pour value
et utilisez:
System.out.println(Constants.YES.getValue());
System.out.println(Constants.NO.getValue());
Vous pouvez également ajouter un getter à l'énumération et simplement l'appeler pour accéder à la variable d'instance:
public enum Constants{
YES("Y"), NO("N");
private String value;
public String getResponse() {
return value;
}
Constants(String value){
this.value = value;
}
}
public class TestConstants{
public static void main(String[] args){
System.out.println(Constants.YES.getResponse());
System.out.println(Constants.NO.getResponse());
}
}
Créez une méthode getValue () dans votre enum et utilisez-la à la place de toString ().
public enum Constants{
YES("y"), NO("N")
private String value;
Constants(String value){
this.value = value;
}
}
public String getValue(){
return value;
}
Et au lieu de:
System.out.println(Constants.YES.toString())
System.out.println(Constants.NO.toString())
(Qui manquent également un point-virgule), utilisez
System.out.println(Constants.YES.getValue());
System.out.println(Constants.NO.getValue());
J'espère que cela a résolu votre problème. Si vous ne souhaitez pas créer de méthode dans votre enum, vous pouvez rendre votre champ de valeur public, mais cela casserait l'encapsulation.
String enumValue = Constants.valueOf("YES")