【发布时间】:2014-06-09 17:27:25
【问题描述】:
我正在创建一个非常通用的注释处理器(例如 xjc),它会扫描我的源代码并基于它生成额外的类。理想情况下,特定领域的库应该依赖于注释处理器库(它不了解领域)。
我在注释处理器中放置的两个字段是 minVersion 和 maxVersion。代码看起来像这样:
@ProcessMe(minVersion=Version.1_3_5, maxVersion=Version.1_5)
private Foo fieldFoo;
注解处理器的目标是创建一个仅在请求版本介于 1.3.5 和 1.5 之间时才进行特殊处理的对象。
不幸的是,要使其正常工作,注释处理器需要了解 @ProcessMe 和 @ProcessMe 需要了解 Version 和 Version 是特定于域的。
我最初的想法是我会有一个 Version 实现的 VersionInfo 接口(我所需要的只是能够枚举可能的值并比较它们)。不幸的是,即使 VersionInfo 扩展了 Enum,我也无法在注解中指定它,因为注解只能包含上述的基元、字符串、类、注解、枚举和一维数组。
那么,任何人都可以想出一种方法来使这项工作不需要注释处理器具有特定领域的知识(版本是特定于领域的,因为一个产品可能使用与另一个产品完全不同的版本控制方案)。
【问题讨论】:
标签: java enums annotations