首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类库中的Enum占位符

类库中的Enum占位符
EN

Stack Overflow用户
提问于 2014-06-09 17:27:25
回答 1查看 909关注 0票数 0

我正在创建一个非常通用的注释处理器(例如xjc),它扫描我的源代码并根据它生成额外的类。理想情况下,特定于领域的库应该依赖于注释处理器库(它不了解域)。

我在注释处理器中放置的两个字段是minVersion和maxVersion。代码应该如下所示:

代码语言:javascript
复制
@ProcessMe(minVersion=Version.1_3_5, maxVersion=Version.1_5)
private Foo fieldFoo;

目标是由注释处理器创建一个对象,该对象只在请求的版本介于1.3.5和1.5之间时进行特殊处理。

不幸的是,要做到这一点,注释处理器需要了解@ProcessMe,而@ProcessMe需要了解Version,而Version是特定于域的。

我最初的想法是,我将有一个VersionInfo接口来实现这个版本(我所需要的只是能够枚举可能的值并对它们进行比较)。不幸的是,即使VersionInfo扩展了Enum,我也无法在注释中指定它,因为注释只能包括上面的原语、字符串、类、注释、枚举和一维数组。

因此,谁能想到一种不需要注释处理器拥有特定领域知识的方法(版本是特定于领域的,因为一个产品可能使用与另一个产品完全不同的版本控制方案)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-09 17:39:20

我建议如下。

将接口ProcessorFilter定义到通用库中。这个接口应该看起来像

代码语言:javascript
复制
interface ProcessorFilter {
   boolean shouldProcess(Element element); 
}

此处理器的所有实现都是在特定于域的库中完成的。

就你而言:

代码语言:javascript
复制
class DomainProcessorFilter {
    public boolean shouldProcess(Element element) {
        //returns true if element is annotated with ProcessMe and version is OK
    }
}

您的通用库应该在类路径中发现ProcessorFilter的所有实现并运行它们。为此您可以使用反思

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24125540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档