3

私は自分のプロジェクトに Sun CodeModel コード ジェネレーターを使用しています。この間に、注釈クラスを生成することになりました。このクラスには、デフォルト値として空の配列を取る配列メンバーがあります。次の例を参照してください。

public class Container {
    public @interface MyAnnotation {
        MyValue[] myValues() default {};
    }
}

このコードを使用して注釈を生成しました

JCodeModel codeModel = new JCodeModel();
JDefinedClass myValueClass = codeModel._class(JMod.PUBLIC, "MyValue", ClassType.CLASS);
JDefinedClass containerClass = codeModel._class(JMod.PUBLIC, "Container", ClassType.CLASS);
JDefinedClass annotationClass = containerClass._annotationTypeDeclaration("MyAnnotation");
annotationClass.method(JMod.NONE, myValueClass.array(), "myValues");

しかし、デフォルトの宣言を生成する方法がわかりません。以下のみを生成します。

public class Container {
    public @interface MyAnnotation {
        MyValue[] myValues();
    }
}
4

1 に答える 1

2

JMethoddeclareDefaultValueアノテーション メソッドのデフォルト値を定義できるメソッドがあります。その後のトリックは、空の配列を生成することです{}。既存のクラスを使用してこれを行う方法を理解できませんでしたが、次を使用して簡単に定義できますJExpressionImpl

JCodeModel codeModel = new JCodeModel();
JDefinedClass myValueClass = codeModel._class(JMod.PUBLIC, "MyValue", ClassType.CLASS);
JDefinedClass containerClass = codeModel._class(JMod.PUBLIC, "Container", ClassType.CLASS);
JDefinedClass annotationClass = containerClass._annotationTypeDeclaration("MyAnnotation");
JMethod method = annotationClass.method(JMod.NONE, myValueClass.array(), "myValues");
method.declareDefaultValue(new JExpressionImpl(){
    @Override
    public void generate(JFormatter f) {
        f.p("{}");
    }
});

これにより、次が生成されます。

public @interface MyAnnotation {
    MyValue[] myValues() default {};
}
于 2015-05-08T04:11:42.460 に答える