Java:在框架中定义枚举(抽象枚举的变通方法)
我想创建一个可以在许多不同系统中重用的全局框架。 我想包括一种枚举,其内容取决于项目。具体地说,这个枚举定义了不同类型的权限,将Java:在框架中定义枚举(抽象枚举的变通方法),java,jar,enums,abstract,Java,Jar,Enums,Abstract,我想创建一个可以在许多不同系统中重用的全局框架。 我想包括一种枚举,其内容取决于项目。具体地说,这个枚举定义了不同类型的权限,将int作为优先级(admin=100,advanced user=50,basic user=10等)25,然后 非常感谢你的帮助 编辑:根据你的回答(都很好),我明白我的问题是什么(很抱歉之前没有说这个,我当时看不出来!) 我需要一个函数来转换枚举中的字符串。 那么,我如何使用“静态”函数实现这个接口(我知道静态在接口中是不可能的,这将是一个问题),它给出: publ
int
作为优先级(admin=100,advanced user=50,basic user=10等)25,然后
非常感谢你的帮助
编辑:根据你的回答(都很好),我明白我的问题是什么(很抱歉之前没有说这个,我当时看不出来!)
我需要一个函数来转换枚举中的字符串。
那么,我如何使用“静态”函数实现这个接口(我知道静态在接口中是不可能的,这将是一个问题),它给出:
public interface IRole
{}
public enum ERole implements IRole
{}
那么我的库中的最后一个函数是:
public function IRole getRole()
{
return IRole.getValueAsRole(myString);
}
再次抱歉,之前没有解释这一点。我希望这是清楚的。从一开始这就是我的问题
非常感谢您可以使用authorizationLevel()等必要方法定义接口。由于枚举可以在项目上实现接口,因此可以创建一个枚举来实现它。
如果应该使用这样的枚举,则可以使用接口。对于泛型,您甚至可以强制使用实现接口的枚举。您可以使用必要的方法(如authorizationLevel())定义接口。由于枚举可以在项目上实现接口,因此可以创建一个枚举来实现它。
如果应该使用这样的枚举,则可以使用接口。对于泛型,您甚至可以强制使用实现接口的枚举。枚举可以实现接口,因此可以将接口用作“抽象枚举” 因此,在您的外部
API
中,您可以使用该接口,这样人们就可以提供自己的角色的实现
,同时也可以使用您的枚举中可用的内容
void fn(Role role);
fn(new MyRole()); // provided by user
fn(SomeRoles.ADMIN); //provided by framework
它是
类型安全的
,但是可扩展的
枚举可以实现
接口,因此可以将该接口用作“抽象枚举”
因此,在您的外部API
中,您可以使用该接口,这样人们就可以提供自己的角色的实现
,同时也可以使用您的枚举中可用的内容
void fn(Role role);
fn(new MyRole()); // provided by user
fn(SomeRoles.ADMIN); //provided by framework
它是
类型安全的
,但是可扩展的
在您的框架(role.java)中是一个角色接口:
框架提供的一组角色(roles.java):
框架中的权限检查器(Authorization.java):
框架的客户端(ClientRoles.java)提供的一组角色:
客户端应用程序(基于角色的MSMain.java):
不过,这是在重塑车轮。可能值得一看的是,哪些解决了这些问题并与现有框架集成。框架中的角色接口(role.java): 框架提供的一组角色(roles.java): 框架中的权限检查器(Authorization.java): 框架的客户端(ClientRoles.java)提供的一组角色: 客户端应用程序(基于角色的MSMain.java):
不过,这是在重塑车轮。可能值得一看的是,哪些解决了这些问题并与现有框架集成。您必须更具体一些。我不太明白这个问题,我想是的。很难解释。因此,为了保持简单:我必须采取什么样的解决办法使枚举抽象(枚举在框架中声明,但为空,内容在具体项目中定义)?不,你不能,这不是枚举的意义。看看这个:你必须更具体一些。我不太明白这个问题,我想是的。很难解释。因此,为了保持简单:我必须采取什么样的解决办法使枚举抽象(枚举在框架中声明,但为空,内容在具体项目中定义)?不,你不能,这不是枚举的意义。看看这个:@Hermios这是你想做的事情吗?我很乐意根据需要进一步阐述。@Hermios这是你想要做的事情吗?我很高兴根据需要进一步阐述。
public interface Role {
int authorizationLevel();
}
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;
}
}
public final class Authorization {
static boolean isAuthorized(Role role) {
return Roles.ADMIN.equals(role) ||
role.authorizationLevel() > 25;
}
}
enum ClientRoles implements Role {
WEB_DESIGNER(50);
private final int authorizationLevel;
@Override
public int authorizationLevel() {
return authorizationLevel;
}
}
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!");
}
}
}