web-dev-qa-db-fra.com

Meilleur moyen de créer un énumération de chaînes?

Quel est le meilleur moyen d’avoir un type enum représentant un ensemble de chaînes?

J'ai essayé ceci:

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

Comment puis-je les utiliser comme Strings?

345
Dori

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
     */
    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 d'accesseur en lecture pour text.

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

584
Buhake Sindi

Valeurs de chaîne personnalisées pour Enum

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

La valeur de chaîne par défaut pour Java enum est sa valeur faciale ou le nom de l'élément. Cependant, vous pouvez personnaliser la valeur de chaîne en remplaçant 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 du code de test suivant produira ceci:

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
101
vaichidrewar

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
}

donne ONE.

64
Bart Kiers

Définissez le nom enum sur la même chaîne que vous le souhaitez ou, plus généralement, associez des attributs arbitraires à vos valeurs enum:

enum Strings {
   STRING_ONE("ONE"), STRING_TWO("TWO");
   private final String stringValue;
   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.

16
Adrian Smith

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

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

Vous pouvez l'utiliser pour la chaîne Enum

public enum EnumTest {
    NAME_ONE("Name 1"),
    NAME_TWO("Name 2");

    private final String name;

    /**
     * @param name
     */
    private EnumTest(final String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

Et appel de la méthode principale

public class Test {
    public static void main (String args[]){
        System.out.println(EnumTest.NAME_ONE.getName());
        System.out.println(EnumTest.NAME_TWO.getName());
    }
}
6
Shohel Rana

Si vous ne pas voulez utiliser constructeurs, et que vous voulez avoir un nom spécial pour la méthode, essayez ceci:

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

  public abstract String getDescription();
}

Je soupçonne que c'est la la plus rapide solution. Il n'y a pas besoin d'utiliser variables final.

3
Adam111p

Obtenir et définir avec des valeurs par défaut.

public enum Status {

    STATUS_A("Status A"),  STATUS_B("Status B"),

    private String status;

    Status(String status) {
        this.status = status;
    }

    public String getStatus() {
        return status;
    }
}
0
Pravin