我已经阅读了很多关于如何enum使用java从其值获取相应的名称,但没有任何示例似乎对我有用!怎么了?
public class Extensions {
public enum RelationActiveEnum
{
Invited(0),
Active(1),
Suspended(2);
private final int value;
private RelationActiveEnum(final int value) {
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
}
在我使用的另一个课程中:
int dbValue = supp.ACTIVE;
Extensions.RelationActiveEnum enumValue(dbValue);
String stringName = enumValue.toString(); //Visible
// OR
int dbValuee = supp.ACTIVE;
String stringValue = Enum.GetName(typeof(RelationActiveEnum), dbValue);
Run Code Online (Sandbox Code Playgroud)
我应该工作吧?但它不!它告诉我dbValue cannote可以转换为RelationActiveEnum ...
Veg*_*ger 49
说我们有:
public enum MyEnum {
Test1, Test2, Test3
}
Run Code Online (Sandbox Code Playgroud)
要获取枚举变量的名称,请使用name():
MyEnum e = MyEnum.Test1;
String name = e.name(); // Returns "Test1"
Run Code Online (Sandbox Code Playgroud)
要从(字符串)名称获取枚举,请使用valueOf():
String name = "Test1";
MyEnum e = Enum.valueOf(MyEnum.class, name);
Run Code Online (Sandbox Code Playgroud)
如果需要integer值与枚举字段匹配,请扩展枚举类:
public enum MyEnum {
Test1(1), Test2(2), Test3(3);
public final int value;
MyEnum(final int value) {
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以使用:
MyEnum e = MyEnum.Test1;
int value = e.value; // = 1
Run Code Online (Sandbox Code Playgroud)
并使用整数值查找枚举:
MyEnum getValue(int value) {
for(MyEnum e: MyEunm.values()) {
if(e.value == value) {
return e;
}
}
return null;// not found
}
Run Code Online (Sandbox Code Playgroud)
Gar*_*vis 38
既然你的'价值'也恰好与你可以做的顺序相符:
public enum RelationActiveEnum {
Invited,
Active,
Suspended;
private final int value;
private RelationActiveEnum() {
this.value = ordinal();
}
}
Run Code Online (Sandbox Code Playgroud)
从价值中得到一个枚举:
int value = 1;
RelationActiveEnum enumInstance = RelationActiveEnum.values()[value];
Run Code Online (Sandbox Code Playgroud)
我想一个静态方法是一个很好的地方放这个:
public enum RelationActiveEnum {
public static RelationActiveEnum fromValue(int value)
throws IllegalArgumentException {
try {
return RelationActiveEnum.values()[value]
} catch(ArrayIndexOutOfBoundsException e) {
throw new IllegalArgumentException("Unknown enum value :"+ value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果你的'价值'与枚举序数不同,那么这一切都会崩溃.
lcg*_*ida 25
您可以创建一个查找方法.不是最有效的(取决于枚举的大小),但它的工作原理.
public static String getNameByCode(int code){
for(RelationActiveEnum e : RelationActiveEnum.values()){
if(code == e.value) return e.name();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
RelationActiveEnum.getNameByCode(3);
Run Code Online (Sandbox Code Playgroud)
你能做的是
RelationActiveEnum ae = Enum.valueOf(RelationActiveEnum.class,
RelationActiveEnum.ACTIVE.name();
Run Code Online (Sandbox Code Playgroud)
要么
RelationActiveEnum ae = RelationActiveEnum.valueOf(
RelationActiveEnum.ACTIVE.name();
Run Code Online (Sandbox Code Playgroud)
要么
// not recommended as the ordinal might not match the value
RelationActiveEnum ae = RelationActiveEnum.values()[
RelationActiveEnum.ACTIVE.value];
Run Code Online (Sandbox Code Playgroud)
如果您想要通过枚举字段进行查找,则需要构建一个集合,例如List,数组或Map.
public enum RelationActiveEnum {
Invited(0),
Active(1),
Suspended(2);
private final int code;
private RelationActiveEnum(final int code) {
this.code = code;
}
private static final Map<Integer, RelationActiveEnum> BY_CODE_MAP = new LinkedHashMap<>();
static {
for (RelationActiveEnum rae : RelationActiveEnum.values()) {
BY_CODE_MAP.put(rae.code, rae);
}
}
public static RelationActiveEnum forCode(int code) {
return BY_CODE_MAP.get(code);
}
}
Run Code Online (Sandbox Code Playgroud)
允许你写
String name = RelationActiveEnum.forCode(RelationActiveEnum.ACTIVE.code).name();
Run Code Online (Sandbox Code Playgroud)
在我的情况下,值不是整数而是字符串.可以将getNameByCode方法添加到枚举中以获取String值的名称 -
enum CODE {
SUCCESS("SCS"), DELETE("DEL");
private String status;
/**
* @return the status
*/
public String getStatus() {
return status;
}
/**
* @param status
* the status to set
*/
public void setStatus(String status) {
this.status = status;
}
private CODE(String status) {
this.status = status;
}
public static String getNameByCode(String code) {
for (int i = 0; i < CODE.values().length; i++) {
if (code.equals(CODE.values()[i].status))
return CODE.values()[i].name();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
156054 次 |
| 最近记录: |