抽象java枚举
我编写的库应该依赖于枚举,但实际的枚举应该由库的用户定义 在下面的示例中,抽象java枚举,java,enums,abstract-class,Java,Enums,Abstract Class,我编写的库应该依赖于枚举,但实际的枚举应该由库的用户定义 在下面的示例中,authorize方法需要枚举类型Permission的参数 acl.authorize(userX, Permission.READ, Permission.WRITE) 我的库应该能够处理库用户定义的任意权限。但是没有权限枚举,我无法编译我的库。所以我需要像这样的东西 abstract enum Permission 在我的图书馆里。有解决办法吗?以下是我建议的步骤 编写注释-public@interface权限
authorize
方法需要枚举类型Permission
的参数
acl.authorize(userX, Permission.READ, Permission.WRITE)
我的库应该能够处理库用户定义的任意权限。但是没有权限
枚举,我无法编译我的库。所以我需要像这样的东西
abstract enum Permission
在我的图书馆里。有解决办法吗?以下是我建议的步骤
public@interface权限
@Permission
public enum ConcretePermissionEnum {..}
授权方法如下所示:
public boolean authorize(User user, Enum... permissions) {
for (Enum permission : permissions) {
if (permission.getClass().isAnnotationPresent(Permission.class)){
// handle the permission
}
}
}
如果您希望权限枚举具有某些特定方法,或者只需要一个“标记”,则可以让用户枚举实现您的接口(而不是注释): 这将启用编译时检查,而不是运行时检查,与注释方法一样,
authorize
方法签名如下所示:
public boolean authorize(User user, PermissionInterface... permissions)
我将使用enum随后将实现的接口。类似于
public interface PermissionType{}
例如,客户端将使用它来定义枚举,例如
public enum Permission implements PermissionType
[...]
然后,您的API将使用
PermissionType
type接受参数。我的库不应该知道读取权限。该示例显示了my library的用户定义枚举的用法。我的库应该只知道“权限枚举的某些元素”,就像JDK7的“更多NIO特性”中使用的那个样。例如:@TomHawtin-tackline:该链接现在已失效。新链接万岁:
public enum Permission implements PermissionType
[...]