一个简单的枚举
public enum UserRole {
//系统管理员
ROLE_ROOT_ADMIN,
//订单管理员
ROLE_ORDER_ADMIN,
// 普通用户
ROLE_NORMAL
}
自定义扩充枚举
上面的枚举列子非常简单,仅仅只是单值的情形,而实际项目中用枚举往往只多值用法
,
比如,在里面加入角色名-角色编码的对应关系,这也是实际项目中常用的用法。
public enum UserRole2 {
ROLE_ROOT_ADMIN("系统管理员",00000),
ROLE_ORDER_ADMIN("订单管理员",10000),
ROLE_NORMAL("普通用户",20000);
//以下为自定义属性
private final String roleName;
private final Integer roleCode;
public String getRoleName(){
return this.roleName;
}
public Integer getRoleCode(){
return this.roleCode;
}
//以下为自定义构造函数
UserRole2(String roleName,Integer roleCode){
this.roleName = roleName;
this.roleCode = roleCode;
}
/**
* 通过角色名找到对应的角色编码
* @param roleName
* @return
*/
public static Integer getRoleCodeByRoleName(String roleName){
for (UserRole2 enums :UserRole2.values()){
if (enums.getRoleName().equals(roleName)){
return enums.getRoleCode();
}
}
return null;
}
}
枚举+接口
使用枚举解决:
首先定义一个公用接口RoleOperation,表示不同角色所能所的操作:
接下来我们将不同角色情况全部交由枚举来做,定义一个不同角色有不同权限的枚举类RoleEnum:
public enum RoleEnum implements RoleOperation {
//系统管理员 有A操作权限
ROLE_ROOT_ADMIN{
@Override
public String op() {
return "ROLE_ROOT_ADMIN:"+"has AAA permission";
}
},
ROLE_ORDER_ADMIN{
@Override
public String op() {
return "ROLE_ORDER_ADMIN:"+"has BBB permission";
}
},
ROLE_NORMAL{
@Override
public String op() {
return "ROLE_NORMAL:"+"has CCC permission";
}
};
}
这样调用就变得非常简单了,
package com.lsh.enu;
/**
* @author :LiuShihao
* @date :Created in 2020/12/16 2:06 下午
* @desc :
*/
public class JudgeRole {
/**
* 使用if/else
* @param roleName
* @return
*/
public String judge1(String roleName){
String result = "";
if ("ROLE_ROOT_ADMIN".equals(roleName)){
result = "ROLE_ROOT_ADMIN:"+"has AAA permission";
}else if ("ROLE_ORDER_ADMIN".equals(roleName)){
result = "ROLE_ORDER_ADMIN:"+"has BBB permission";
}else if ("ROLE_NORMAL".equals(roleName)){
result = "ROLE_NORMAL:"+"has CCC permission";
}else {
result = "XXX";
}
return result;
}
/**
* 使用枚举判断
* @param roleName
* @return
*/
public String judge2(String roleName){
return RoleEnum.valueOf(roleName).op();
}
}