3

我正在 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 中删除特定的注释?

4

1 回答 1

2

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

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

    return Collections.unmodifiableCollection(this.annotations);
}

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

于 2016-01-20T00:16:21.870 回答