gpt4 book ai didi

java - 如何删除 JDefinedClass 上的注释

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:16:18 25 4
gpt4 key购买 nike

我正在 jsonschema2pojo 中编写自定义注释器,以调整此代码生成器如何使用 Jackson 注释对生成的类进行注释。

为了简化用例,我手头有一个 JClass,它已经用

进行了注释
JsonInclude( JsonInclude.Include.NON_NULL )

我想将其替换为:

JsonInclude( JsonInclude.Include.NON_EMPTY )

我正在使用 com.sun.codemodel:codemodel:2.6

如果我尝试在不删除原始注释的情况下添加注释

JDefinedClass clazz = ...; // the class we want to annotate
clazz.annotate(JsonInclude.class).param( "value", JsonInclude.Include.NON_EMPTY );

然后我得到一个编译错误,说我不能有一个 @JsonInclude 模式。

所以我尝试在添加之前删除注释

JCodeModel codeModel = new JCodeModel();
JClass jsonInclude = codeModel.ref(JsonInclude.class);
clazz.annotations().remove( jsonInclude );

但是注解的集合是不可修改的...

有没有办法从 JDefinedClass 中删除特定注释?

最佳答案

查看 JCodeModel 源代码,您是对的,没有一种方法可以在不通过反射(访问私有(private)成员变量)破坏类的情况下删除注释:

public Collection<JAnnotationUse> annotations() {
if(this.annotations == null) {
this.annotations = new ArrayList();
}

return Collections.unmodifiableCollection(this.annotations);
}

我建议在您需要定义 >JDefinedClass。对于我编写的代码生成器,我通常在进入代码生成阶段之前准备好一个模型,这有助于防止在指定后决定生成什么。

关于java - 如何删除 JDefinedClass 上的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34874419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com