java—在注解中支持“可扩展枚举”的最佳方法?

8i9zcol2  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(284)

在我的图书馆里有一个“用户级别”的概念。我提供了几个默认级别,但是出于各种原因,我想让用户选择使用自己的级别。
目前这是作为

public interface AdminLevel {
    public void name();
}

public enum StandardAdminLevels implements AdminLevel {
    ADMIN,
    ANONYMOUS
}

问题是用户通常会在注解中传递所需的用户级别。我尝试过但失败的事情:
使用adminlevel作为类型-失败,返回“invalid type for annotation member”
使用字符串作为类型,但将值设置为 StandardAdminLevels.ADMIN.name() -失败,返回“属性值必须为常量”
使standardadminlevels成为一个final类,该类不使用每个级别的公共静态final字段实现任何内容(本质上是一个枚举)-失败的原因是“invalid type for annotation member”
有没有其他我想不出的方法在注解中有可扩展的枚举?由于枚举的清晰性和对无效值的基本保护,我尝试使用枚举,但我能想到的唯一其他方法是字符串常量。我遇到的问题是,需要在使用的每个单点用户级别上进行验证,甚至可能在客户端代码中
有什么想法吗?

bzzcjhmw

bzzcjhmw1#

一个想法:每一个可能的adminlevel都是它自己的类。通过 Class 类的注解。

public final class Admin implements AdminLevel { ... }
public final class Anonymous implements AdminLevel { ... }

@Requires(Admin.class) public void protectedMethod() { ... }

@interface Requires {
  Class<? extends AdminLevel> value();
}

相关问题