如何使用多个枚举类型编写注释?

时间:2010-01-20 22:01:41

标签: java enums annotations

我正在尝试编写一些注释来帮助将测试用例方法与各种元数据相关联。到目前为止,我的注释包括BugFix,UseCase和Requirement。我的最终目标是编写一个注释处理器,以显示哪些测试用例与各个错误修复,用例和要求相关联。

当我刚刚为自己的项目实现这个时,我为每个测试关联类别创建了特定于我的项目的枚举。例如,我有ProjectUseCase枚举,我可以将其作为值传递给我的测试方法上的UseCase注释。这样可以轻松地在一个地方添加其他用例或修改用例。

现在,我想在我的工作中为其他开发人员提供此代码。当然,他们将从事其他项目,包括不同的用例,需求和错误修复。

以下是我遇到的问题:

  1. Enum无法扩展,因此我无法拥有其他人可以为自己的项目扩展的基础UseCase枚举。
  2. 注释属性的值必须是常量。这使我无法在枚举上使用接口标记(TestAssociation),并使用TestAssociation接口来获取我的注释值。此外,这使我无法在我的注释中使用String值,并在使用注释时传入枚举名称,例如:@UseCase(ProjectUseCase.GENERAL.name())。
  3. 据我所知,这让我只使用原始字符串来表示值,这剥夺了我的类型安全性和快速重构的能力。使用常量字符串类代替枚举似乎是解决这个问题的最佳方法,因为每个开发人员都可以使用自己的字符串。

    我能想到的另一件事是引用一个Enum类(或一类常量字符串),而不是在jar中包含该类,留给用户实现。

    有任何建议或解决方法吗?

    我还想知道是否有任何项目已经提供类似的功能。

1 个答案:

答案 0 :(得分:2)

烨。

唯一可行的方法是允许任意用户定义的注释,这样如果我的枚举是FooEnum,我可以定义使用它的FooAnnotation。您的框架可以通过查看 it 本身是否使用@UseCase(或者您喜欢的任何内容)进行元注释来将FooAnnotation识别为它正在寻找的注释!