java - 在注释中支持 "Extendable enums"的最佳方式?

标签 java enums annotations

在我的图书馆里有一个“用户级别”的概念。我提供了几个默认级别,但出于各种原因,我想为用户提供使用他们自己的级别的选项。

目前这是实现为

public interface AdminLevel {
    public void name();
}

public enum StandardAdminLevels implements AdminLevel {
    ADMIN,
    ANONYMOUS
}

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

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

有没有其他我想不到的方法可以在注释中使用可扩展的枚举?由于枚举的清晰性和对无效值的基本保护,我试图坚持使用枚举,但我能想到的唯一其他方法是字符串常量。我遇到的问题是需要在使用用户级别的每个点进行验证,甚至可能在客户端代码中进行验证

有什么想法吗?

最佳答案

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

关于java - 在注释中支持 "Extendable enums"的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952198/

相关文章:

java - 将枚举类型作为参数传递

android - PDF 标记和注释工具

java - JPanel 中的 JLabels,在运行时新标签包含以前的标签

java:如何获取压缩字节数组的字符串表示形式?

java - Catalina.out 中的错误 "org.apache.catalina.realm.CombinedRealm startInterna"

c++ - 如何以最少的代码优化翻译枚举?

java - 检查子字符串是否存在于java中的字符串数组列表中

java - 如何在java中将一个枚举转换为另一个枚举?

java - JAX-RS boolean 值与整数

PHP注解库