web-dev-qa-db-fra.com

Comment obtenir de la valeur d'un enum Java

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 ??

3
Mandar

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;
    }
}
13
Mohammed Aouf Zouag

Ecrivez Getter et Setter pour value et utilisez:

System.out.println(Constants.YES.getValue());
System.out.println(Constants.NO.getValue());
4
m.aibin

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());
    }
}
3
David Yee

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.

3
Just a Logic Gate
0
Peter Isberg