Java-枚举的使用

最简单使用,强制类型约束

public enum VideoStatus {
Draft, Review, Published
}
// 入参就有明确类型约束
void judgeVideoStatus( VideoStatus status ) {
...
}

自定义扩充枚举

public enum UserRole {

ROLE_ROOT_ADMIN( "系统管理员", 000000 ),
ROLE_ORDER_ADMIN( "订单管理员", 100000 ),
ROLE_NORMAL( "普通用户", 200000 ),
;

// 以下为自定义属性

private final String roleName;  //角色名称

private final Integer roleCode; //角色编码

// 以下为自定义构造函数

UserRole( String roleName, Integer roleCode ) {
    this.roleName = roleName;
    this.roleCode = roleCode;
}

// 以下为自定义方法

public String getRoleName() {
    return this.roleName;
}

public Integer getRoleCode() {
    return this.roleCode;
}

public static Integer getRoleCodeByRoleName( String roleName ) {
    for( UserRole enums : UserRole.values() ) {
        if( enums.getRoleName().equals( roleName ) ) {
            return enums.getRoleCode();
        }
    }
    return null;
}

}

枚举 + 接口

public interface RoleOperation {
String op(); // 表示某个角色可以做哪些op操作
}
public enum RoleEnum implements RoleOperation {

// 系统管理员(有A操作权限)
ROLE_ROOT_ADMIN {
    @Override
    public String op() {
        return "ROLE_ROOT_ADMIN:" + " has AAA permission";
    }
},

// 订单管理员(有B操作权限)
ROLE_ORDER_ADMIN {
    @Override
    public String op() {
        return "ROLE_ORDER_ADMIN:" + " has BBB permission";
    }
},

// 普通用户(有C操作权限)
ROLE_NORMAL {
    @Override
    public String op() {
        return "ROLE_NORMAL:" + " has CCC permission";
    }
};

}

不需要if/else

public class JudgeRole {
public String judge( String roleName ) {
// 一行代码搞定!之前的if/else灰飞烟灭
return RoleEnum.valueOf(roleName).op();
}
}

posted @ 2021-09-15 12:21  骆驼f  阅读(56)  评论(0)    收藏  举报