提问者:小点点

在注释中支持“可扩展枚举”的最佳方式?


在我的库中有一个“用户级别”的概念。我提供了几个默认级别,但出于各种原因希望让用户可以选择使用自己的级别。

目前这是作为

public interface AdminLevel {
    public void name();
}

public enum StandardAdminLevels implements AdminLevel {
    ADMIN,
    ANONYMOUS
}

问题是用户通常会在注释中传递他们所需的用户级别。我尝试过但失败的事情:

  • 使用AdminLevel作为类型-“注释成员的无效类型”失败
  • 使用String作为类型,但使用StandardAdminLevels.ADMIN.name()设置值-属性值必须是常量时失败
  • 使Standard ardAdminLevels成为一个最终类,它不为每个级别(本质上是一个枚举)实现任何带有公共静态最终字段的东西-失败时“注释成员的无效类型”

还有什么其他方法我想不出在注解中有可扩展的枚举吗?我试图坚持使用枚举,因为它们很清晰,并且对无效值有基本的保护,但我能想到的唯一其他方法是字符串常量。我遇到的问题是,在使用用户级别的每一点都需要验证,甚至可能在客户端代码中

有什么想法吗?


共1个答案

匿名用户

一个想法:每个可能的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();
}