3

このコード ジェネレーターが生成されたクラスに Jackson アノテーションを付ける方法を微調整するために、jsonschema2pojo にカスタム アノテーターを作成しています。

ユースケースを単純化するために、すでに注釈が付けられている 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 を 1 つしか使用できないというコンパイル エラーが発生します。

だから私はそれを追加する前に注釈を削除しようとしました

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 に答える