首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何注册具有配置差异的多个自定义doclet实例

如何注册具有配置差异的多个自定义doclet实例
EN

Stack Overflow用户
提问于 2017-07-15 02:06:49
回答 1查看 69关注 0票数 0

我正在编写一个自定义的Javadoc doclet,以打印包含类的javax.validation约束的表。它基本上是有效的,但我发现Doclet框架是相当严格和不灵活的。

作为背景,一个类中的一个属性很可能有多个验证约束。当我最初编写Taglet时,我在表中为每个约束呈现单独的行,即使属性名是相同的。

有人评论说,他们希望在同一行上呈现单个属性的所有约束,并以逗号分隔。我个人认为我不会想要这样,但我认为没有理由限制它,因为这是一个合理的要求。

所以,我想,在Taglet上允许配置选项会有多难呢?很难,正如我所发现的。

首先,我假设可以定义接受配置选项的Taglet。然后我发现没有办法做到这一点。

好的,然后我想我应该用点小把戏。

下面是我的taglet类中的一段代码:

代码语言:javascript
复制
public static void register(Map<String, Taglet> tagletMap)  {
    ValidationConstraintsTaglet taglet  = new ValidationConstraintsTaglet();
    registerInstance(tagletMap, taglet, taglet.getName());
    //ValidationConstraintsTaglet tagletCombined  = new ValidationConstraintsTaglet().combineConstraints(true);
    //registerInstance(tagletMap, tagletCombined, taglet.getName() + "Combined");
}

private static void registerInstance(Map<String, Taglet> tagletMap, Taglet taglet, String name) {
    if (tagletMap.get(name) != null) {
        tagletMap.remove(name);
    }
    tagletMap.put(name, taglet);
}

使用这样的代码,它可以很好地工作,为每个约束呈现一行。

如果我在被注释掉的两行中进行了注释,这是试图使用不同的名称注册taglet的第二个实例,在名称的末尾添加“组合”。在我"toString(Tag)“方法中,我检查了"isCombinedConstraints”选项,在一行中呈现了单个属性的所有约束。如果默认设置为"combinedConstraints“,我确保此功能可以正常工作。

所以,如果我在注释了这两行的情况下运行它,我会得到一个令人费解的错误:

代码语言:javascript
复制
javadoc: error - com.sun.tools.doclets.internal.toolkit.util.DocletAbortException: java.lang.ClassCastException: com.att.det.taglet.ValidationConstraintsTaglet cannot be cast to com.sun.tools.doclets.internal.toolkit.taglets.Taglet

这就是我得到的所有信息。甚至没有堆栈跟踪来告诉我这是在哪里发生的。

当我第一次看到这一点时,我假设我一定也在同一时间改变了其他一些东西,从而导致了这一点。然后我注释掉了这两行代码并重新测试,错误就消失了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-19 03:48:40

我放弃了这种方法,因为我不能让它工作,并且在这里没有得到响应。

我不得不做的是在一个子类中实现配置更改,它有自己的"register“方法和一个不同的标记名。

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

https://stackoverflow.com/questions/45109245

复制
相关文章

相似问题

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