如何删除 JDefinedClass 上的注释
How to remove an annotation on a JDefinedClass
我正在 jsonschema2pojo 中编写自定义注释器,以调整此代码生成器如何使用 Jackson 注释对生成的 class 进行注释。
为了简化用例,我手头有一个 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 源代码,你是对的,没有办法在不破坏 class 通过反射(访问私有成员变量)的情况下删除注释:
public Collection<JAnnotationUse> annotations() {
if(this.annotations == null) {
this.annotations = new ArrayList();
}
return Collections.unmodifiableCollection(this.annotations);
}
我建议在您需要定义 JDefinedClass
之前的某处,在您的应用程序的更高级别尝试确定哪个注释是合适的(NON_NULL
或 NON_EMPTY
)。对于我编写的代码生成器,我通常在进入代码生成阶段之前准备好一个模型,这有助于防止在指定后决定生成什么。
我正在 jsonschema2pojo 中编写自定义注释器,以调整此代码生成器如何使用 Jackson 注释对生成的 class 进行注释。
为了简化用例,我手头有一个 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 源代码,你是对的,没有办法在不破坏 class 通过反射(访问私有成员变量)的情况下删除注释:
public Collection<JAnnotationUse> annotations() {
if(this.annotations == null) {
this.annotations = new ArrayList();
}
return Collections.unmodifiableCollection(this.annotations);
}
我建议在您需要定义 JDefinedClass
之前的某处,在您的应用程序的更高级别尝试确定哪个注释是合适的(NON_NULL
或 NON_EMPTY
)。对于我编写的代码生成器,我通常在进入代码生成阶段之前准备好一个模型,这有助于防止在指定后决定生成什么。