Лучший способ создать перечисление строк?
Каков наилучший способ иметь enum
Тип представляет набор строк?
Я попробовал это:
enum Strings{
STRING_ONE("ONE"), STRING_TWO("TWO")
}
Как я могу использовать их как Strings
?
7 ответов
Я не знаю, что вы хотите сделать, но именно так я и перевел ваш пример кода....
/**
*
*/
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();
Пользовательские строковые значения для 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
Используйте его name()
метод:
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(Strings.ONE.name());
}
}
enum Strings {
ONE, TWO, THREE
}
доходность ONE
,
Либо установите имя перечисления равным требуемой строке, либо, в более общем случае, вы можете связать произвольные атрибуты со значениями перечисления:
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.
}
Важно иметь константы вверху, а методы / атрибуты внизу.
В зависимости от того, что вы подразумеваете под "использовать их как строки", вы можете не использовать здесь 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";
}
Вы можете использовать это для строки 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());
}
}
Если вы не хотите использовать конструкторы и хотите иметь специальное имя для метода, попробуйте это так:
public enum MyType {
ONE {
public String getDescription() {
return "this is one";
}
},
TWO {
public String getDescription() {
return "this is two";
}
};
public abstract String getDescription();
}
Я подозреваю, что это самое быстрое решение. Нет необходимости использовать переменные final.
Получить и установить значения по умолчанию.
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;
}
}