Каков наилучший способ, чтобы тип enum
представлял собой набор строк?
Я пробовал это:
enum Strings{
STRING_ONE("ONE"), STRING_TWO("TWO")
}
Как я могу использовать их как Strings
?
Каков наилучший способ, чтобы тип enum
представлял собой набор строк?
Я пробовал это:
enum Strings{
STRING_ONE("ONE"), STRING_TWO("TWO")
}
Как я могу использовать их как Strings
?
Я не знаю, что вы хотите сделать, но именно так я и перевел ваш пример кода....
/**
*
*/
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();
Пользовательские значения строк для перечисления
из http://javahowto.blogspot.com/2006/10/custom-string-values-for-enum.html
Строковое значение по умолчанию для java enum - это его номинальная стоимость или имя элемента. Однако вы можете настроить строковое значение, переопределив метод 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.
}
Важно иметь константы в верхней части и методы/атрибуты внизу.
В зависимости от того, что вы подразумеваете под "использовать их как строки", вы можете не использовать здесь перечисление. В большинстве случаев решение, предложенное 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;
}
}