356 votes

Java String enum

Quelle est la meilleure façon d'avoir un type enum représente un ensemble de chaînes>

J'ai essayé ceci:

 enum Strings{
   STRING_ONE("ONE"), STRING_TWO("TWO")
}
 

Comment peut-on les utiliser comme des chaînes?

595voto

Buhake Sindi Points 38654

Je ne sais pas ce que vous voulez faire, mais voici comment j'ai traduit votre exemple de code ....

 /**
 * 
 */
package test;

/**
 * @author The Elite Gentleman
 *
 */
public enum Strings {
    STRING_ONE("ONE"),
    STRING_TWO("TWO")
    ;

    private final String text;

    /**
     * @param text
     */
    private Strings(final String text) {
        this.text = text;
    }

    /* (non-Javadoc)
     * @see java.lang.Enum#toString()
     */
    @Override
    public String toString() {
        return text;
    }
}
 

Vous pouvez également créer une méthode getter pour le texte.

Vous pouvez maintenant faire Strings.STRING_ONE.toString();

101voto

vaichidrewar Points 2154

La coutume de la Chaîne de Valeurs de l'Enum

à partir de http://javahowto.blogspot.com/2006/10/custom-string-values-for-enum.html

La valeur par défaut de la chaîne de valeur pour java enum est sa valeur nominale, ou le nom de l'élément. Cependant, vous pouvez personnaliser la valeur de la chaîne en substituant la méthode toString (). Par exemple,

public enum MyType {
  ONE {
      public String toString() {
          return "this is one";
      }
  },

  TWO {
      public String toString() {
          return "this is two";
      }
  }
}

L'exécution de la suite de test de code de produire ce:

public class EnumTest {
  public static void main(String[] args) {
      System.out.println(MyType.ONE);
      System.out.println(MyType.TWO);
  }
}


this is one
this is two

66voto

Bart Kiers Points 79069

Utilisez sa méthode name() :

 public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println(Strings.ONE.name());
    }
}

enum Strings {
    ONE, TWO, THREE
}
 

rendements ONE .

16voto

Adrian Smith Points 6087

Définissez le nom d'enum comme étant la même que la chaîne souhaitée ou, plus généralement, vous pouvez associer des attributs arbitraires à vos valeurs d'énumération:

 enum Strings {
   STRING_ONE("ONE"), STRING_TWO("TWO");
   private final String stringValue;
   private Strings(final String s) { stringValue = s; }
   public String toString() { return stringValue; }
   // further methods, attributes, etc.
}
 

Il est important d'avoir les constantes en haut et les méthodes / attributs en bas.

14voto

hd42 Points 514

En fonction de ce que vous entendez par "utilisez-les comme chaînes de caractères", vous ne voudrez peut-être pas utiliser une énumération ici. Dans la plupart des cas, la solution proposée par The Gentleman Elite vous permettra de les utiliser par leurs toString-méthodes, par exemple en System.out.println(STRING_ONE) ou String s = "Hello "+STRING_TWO , mais quand vous avez vraiment besoin des chaînes (par exemple STRING_ONE.toLowerCase() ), vous pourriez préférer les définir comme des constantes:

 public interface Strings{
  public static final String STRING_ONE = "ONE";
  public static final String STRING_TWO = "TWO";      
}
 

Prograide.com

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.

Powered by:

X