java 中 Enum包含String类型的值可以有很好的应用,定义ErrorCode以及在数据库交互中都很方便。

  • 使用Enum做error code字典,定义包含String值的Enum:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public enum CODE {
OK("OK"),
ERROR("ERROR")
;

private final String msg;

CODE(final String msg) {
this.msg = msg;
}

public String getMsg() {
return this.msg;
}

@Override
public String toString() {
return this.msg;
}
}

用values()方法遍历enum包含的所有value

1
2
3
for (CODE code : CODE.values()) {
System.out.println(code.name() + ":" + code.getMsg());
}

可以通过自定义的方法获取单个Enum的value

1
Sytem.out.println(CODE.OK.getMsg());

通过name获取Enum类型的value

1
System.out.println(CODE.valueOf("OK"));

也可以自定义方法通过value获取Enum的name

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public enum CODE {
OK("OK"),
ERROR("ERROR")
;

private final String msg;

CODE(final String msg) {
this.msg = msg;
}

public String getMsg() {
return this.msg;
}

@Override
public String toString() {
return this.msg;
}

// define dictionary for name/value
private static final Map<String, CODE> lookup = new HashMap<>();

static {
for (CODE code : CODE.values()) {
lookup.put(code.getMsg() : code);
}
}

public static CODE get(String msg) {
return loopup.get(msg);
}
}

使用也很简单

1
CODE code = CODE.get("OK");
  • 包含String的Enum在JPA中用作和数据库交互
1
2
3
4
5
6
7
8
9
10
11
12
public enum QuestionClassify {
SINGLE("SINGLE"), //HR
MULTI("MULTI"), //部门管理员
ESSAY("ESSAY"), //培训师
EVALUATION("EVALUATION"); //学生

private String type;

RoleClassify(String type) {
this.type = type;
}
}