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

40
demandé sur devoured elysium 2010-03-23 07:10:31

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; }
}
60
répondu missingfaktor 2010-03-23 04:36:51

, 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.

81
répondu jjnguy 2015-06-09 03:21:44

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();
  }
}
10
répondu user3054516 2016-02-04 08:45:45