一些情况下, 比如PO属性为Integer值1, 0表示是, 否. 而有个DO或者VO属性用枚举表示是否. 如果这个枚举的index跟Integer不对应, 就会导致dozer复制枚举与数字转换出错.
场景模拟
需求: 库中定义1, 0
表示是, 否
, Flag
枚举的code'2', '1'
表示 是, 否
, name 对应为yes, no
. 当然要尽量避免出现这种情况.
- 枚举
Flag
public enum
Flag
{
no(
"1", "否"), yes("2", "是"), other("0", "其它");
private static
Map<String,
Flag
> valueMap =
new HashMap<>();
static {
for
(
Flag
e :
Flag
.values()) {
valueMap.put(e.code, e);
}
}
private String code;
private String name;
private
Flag
(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return this.code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public static
Flag
valueOfCode
(String code) {
Flag
result = valueMap.get(code);
if (result == null) {
throw new IllegalArgumentException("未知的枚举类型:" + code +
",请核对枚举
Flag
"
);
}
return result;
}
}
- PO
public class SysUserPo extends BasePo implements Serializable {
private String loginName;
private String password;
private String salt;
private String userName;
private String email;
private String phone;
private Integer status;
private Integer deleteStatus;
private Integer isAdmin;
private static final long serialVersionUID = 1L;
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName == null ? null : loginName.trim();
}
public String getPassword() {
return password;
}
public void setPassword(String password) {