Лучший способ создать перечисление строк? - PullRequest
341 голосов
/ 20 октября 2010

Каков наилучший способ, чтобы тип enum представлял набор строк?

Я пробовал это:

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

Как я могу затем использовать их как Strings?

Ответы [ 8 ]

580 голосов
/ 20 октября 2010

Я не знаю, что вы хотите сделать, но именно так я на самом деле перевел ваш пример кода ....

/**
 * 
 */
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;
    }
}

В качестве альтернативы, вы можете создать метод получения для text.

Теперь вы можете сделать Strings.STRING_ONE.toString();

101 голосов
/ 23 ноября 2012

Пользовательские строковые значения для Enum

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

Строковым значением по умолчанию для перечисления java является его номинальное значение или имя элемента.Однако вы можете настроить строковое значение, переопределив метод toString ().Например,

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

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

Запуск следующего тестового кода приведет к следующему:

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
64 голосов
/ 20 октября 2010

Используйте его name() метод:

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

enum Strings {
    ONE, TWO, THREE
}

выход ONE.

16 голосов
/ 20 октября 2010

Либо установите имя перечисления равным требуемой строке, либо, в более общем случае, вы можете связать произвольные атрибуты со значениями перечисления:

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

Важно иметь константы вверху, а методы / атрибуты внизу.

14 голосов
/ 20 октября 2010

В зависимости от того, что вы подразумеваете под «использовать их как строки», вы можете не использовать здесь enum. В большинстве случаев решение, предложенное The Elite Gentleman, позволит вам использовать их через их методы toString, например, в System.out.println(STRING_ONE) или String s = "Hello "+STRING_TWO, но когда вам действительно нужны строки (например, STRING_ONE.toLowerCase()), вы можете определить их как константы:

public interface Strings{
  public static final String STRING_ONE = "ONE";
  public static final String STRING_TWO = "TWO";      
}
5 голосов
/ 07 ноября 2017

Вы можете использовать это для строки 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;
    }
}

и вызов из основного метода

public class Test {
    public static void main (String args[]){
        System.out.println(EnumTest.NAME_ONE.getName());
        System.out.println(EnumTest.NAME_TWO.getName());
    }
}
3 голосов
/ 12 сентября 2016

Если вы не хотите использовать конструкторы и вы хотите иметь специальное имя для метода, попробуйте это:1008 *

Я подозреваю, что это самое быстрое решение.Нет необходимости использовать переменные final .

0 голосов
/ 03 июня 2019

Получить и установить со значениями по умолчанию.

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...