什么是最好的方法来使用存储在Enum字符串字面量的值? 例如:
public enum Modes {
some-really-long-string,
mode1,
mode2,
mode3
}
然后我就可以用《风尚》了。将其字符串表示形式返回为Mode1。而不必一直调用Mode.mode1.toString()。
什么是最好的方法来使用存储在Enum字符串字面量的值? 例如:
public enum Modes {
some-really-long-string,
mode1,
mode2,
mode3
}
然后我就可以用《风尚》了。将其字符串表示形式返回为Mode1。而不必一直调用Mode.mode1.toString()。
当前回答
Enum是一个有点特殊的类。枚举可以存储额外的字段,实现方法等。例如
public enum Modes {
mode1('a'),
mode2('b'),
mode3('c'),
;
char c;
private Modes(char c) {
this.c = c;
}
public char character() {
return c;
}
}
现在你可以说:
System.out.println (Modes.mode1.character ())
并查看输出: 一个
其他回答
您可以为每个枚举值重写toString()方法。
例子:
public enum Country {
DE {
@Override
public String toString() {
return "Germany";
}
},
IT {
@Override
public String toString() {
return "Italy";
}
},
US {
@Override
public String toString() {
return "United States";
}
}
}
用法:
public static void main(String[] args) {
System.out.println(Country.DE); // Germany
System.out.println(Country.IT); // Italy
System.out.println(Country.US); // United States
}
此方法适用于任何枚举:
public enum MyEnum {
VALUE1,
VALUE2,
VALUE3;
public int getValue() {
return this.ordinal();
}
public static DataType forValue(int value) {
return values()[value];
}
public String toString() {
return forValue(getValue()).name();
}
}
Enum是一个有点特殊的类。枚举可以存储额外的字段,实现方法等。例如
public enum Modes {
mode1('a'),
mode2('b'),
mode3('c'),
;
char c;
private Modes(char c) {
this.c = c;
}
public char character() {
return c;
}
}
现在你可以说:
System.out.println (Modes.mode1.character ())
并查看输出: 一个
我发现这个更容易防止输入错误:
public enum Modes {
some-really-long-string,
mode1,
mode2,
mode3;
String str;
Modes(){
this.str = super.name();
}
@Override
@NonNull
public String toString() {
return str;
}
然而,当你需要在log/println上使用String时,或者当java自动编译toString()方法时,这可能会起作用,但在这样的代码行中->
// sample method that require (string,value)
intent.putExtra(Modes.mode1 ,shareElement.getMode()); // java error
// first argument enum does not return value
相反,如上所述,你仍然需要扩展枚举,并在这些情况下使用.name():
intent.putExtra(Modes.mode1.name() ,shareElement.getMode());
package com.common.test;
public enum Days {
monday(1,"Monday"),tuesday(2,"Tuesday"),wednesday(3,"Wednesday"),
thrusday(4,"Thrusday"),friday(5,"Friday"),saturday(6,"Saturday"),sunday(7,"Sunday");
private int id;
private String desc;
Days(int id,String desc){
this.id=id;
this.desc=desc;
}
public static String getDay(int id){
for (Days day : Days.values()) {
if (day.getId() == id) {
return day.getDesc();
}
}
return null;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
};