gpt4 book ai didi

Java : Define an enum in a framework (workaround for abstract enum)

转载 作者:行者123 更新时间:2023-11-29 06:56:09 25 4
gpt4 key购买 nike

我想创建一个可以在许多不同系统中重复使用的全局框架。我想包括一种枚举,其内容取决于项目。具体来说,这个枚举以 int 为优先级定义了不同类型的权限(admin=100,advanced user=50,basic user=10 etc.)<- 这些只是示例,枚举的内容对于另一个项目可能完全不同。由于不可能有一个“抽象”枚举,不幸的是我不知道如何实现它。有人可以给我一些建议(例如设计模式或其他)吗?

一些用例:

如果 myauthorizationLevel=MyEnum.admin 那么...

如果 myauthorizationLevel.value>25 那么 ...

非常感谢您的帮助。

编辑:根据你的回答(都很好),我明白我的问题是什么(很抱歉之前没有说这个,我当时看不到这个!):我需要一个函数来转换枚举中的字符串。那么,我怎样才能用“静态”函数来实现这个接口(interface)(我知道接口(interface)中不可能有静态的,那会是个问题),它给出了:

public interface IRole
{}

public enum ERole implements IRole
{}

那么我库中的最后一个函数是:

public function IRole getRole()
{
return IRole.getValueAsRole(myString);
}

再次抱歉之前没有对此进行解释。我希望这是清楚的。这实际上是我从一开始就存在的问题。

非常感谢

最佳答案

框架中的角色接口(interface) (Role.java):

public interface Role {
int authorizationLevel();
}

您的框架 (Roles.java) 提供的一组角色:

public enum Roles implements Role {
ADMIN(50),
POWER_USER(30),
LIMITED_USER(25),
GUEST(10);

private final int authorizationLevel;

Role(int authorizationLevel) {
this.authorizationLevel = authorizationLevel;
}

@Override
public int authorizationLevel() {
return authorizationLevel;
}
}

框架中的权限检查器 (Authorization.java):

public final class Authorization {
static boolean isAuthorized(Role role) {
return Roles.ADMIN.equals(role) ||
role.authorizationLevel() > 25;
}
}

框架客户端提供的一组角色 (ClientRoles.java):

enum ClientRoles implements Role {
WEB_DESIGNER(50);

private final int authorizationLevel;

@Override
public int authorizationLevel() {
return authorizationLevel;
}
}

客户端应用程序(RoleBased MSMain.java):

public final class RoleBasedCMSMain {
public static void main(String[] args) {
Role role = ClientRoles.WEB_DESIGNER;
if (Authorization.isAuthorized(role)) {
System.out.println("You are authorized!");
}
}
}

不过,这是在重新发明轮子。这可能值得一看 JAAS (Java Authentication and Authorization Service)它解决了这些问题并与现有框架集成。

关于Java : Define an enum in a framework (workaround for abstract enum),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33709195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com