1

クラスの生成と JSR303 注釈の追加に com.sun.codemodel を使用しています。@Pattern.List アノテーションを追加する場合を除いて、これは正常に機能しています。

field.annotate(Pattern.class).param("regexp", "some_expression");

これは現在生成されているものです:

@Pattern(regexp = "first_expression", message = "first.Pattern.message")
@Pattern(regexp = "second_expression", message = "second.Pattern.message")
@Pattern(regexp = "third_expression", message = "third.Pattern.message")

これは私が生成したいものです

@Pattern.List({
  @Pattern(regexp = "first_expression", message = "first.Pattern.message")
  @Pattern(regexp = "second_expression", message = "second.Pattern.message")
  @Pattern(regexp = "third_expression", message = "third.Pattern.message")
})

誰かがこれがどのように行われるか考えていますか?

4

1 に答える 1

3

代わりに @PatternList(list = {@Pattern...}) が必要であると仮定すると、次のparamArray()メソッドを使用する必要があります。

JDefinedClass testme = codeModel._class("Testme");

JAnnotationUse patternListAnnotation = testme.annotate(Pattern.List.class);
JAnnotationArrayMember list = patternListAnnotation.paramArray("value");

list.annotate(Pattern.class).param("regexp", "first_expression").param("message", "first.Pattern.message");
list.annotate(Pattern.class).param("regexp", "second_expression").param("message", "second.Pattern.message");
list.annotate(Pattern.class).param("regexp", "third_expression").param("message", "third.Pattern.message");

以下を出力します。

@Pattern.List({
    @Pattern(regexp = "first_expression", message = "first.Pattern.message"),
    @Pattern(regexp = "second_expression", message = "second.Pattern.message"),
    @Pattern(regexp = "third_expression", message = "third.Pattern.message")
})
public class Testme {
}

これは、コード例で示唆されているように、フィールドに対しても同じように機能するはずです。

于 2013-04-11T17:22:25.170 に答える