lombokの既存バグにハマったので、その一時的な回避策のメモ。
なお、この情報は以下の環境でおこなった。
- Java -
1.8.0_102
- lombok -
1.16.12
なお、issueはこちら。
lombokで生成されるgetter(あるいはsetter)にアノテーションを付与する方法
Getter
の onMethod
に特殊な記述法でついてほしいアノテーションを渡す。
@Data @AllArgsConstructor @NoArgsConstructor public class Bool { @Getter(onMethod = @__({ @XmlAttribute })) private boolean value; }
問題 - onMethod
で渡すアノテーションにプロパティを設定するとコンパイルで落ちる
lombokのonXのドキュメントを読むかぎり、 onMethod
に渡すアノテーションにプロパティが設定されていてもうまくコンパイルされるようである。
@Data @AllArgsConstructor @NoArgsConstructor public class Int { @Getter(onMethod = @__({ @XmlAttribute(name = "int") })) private int value; }
ところが、これをコンパイルすると次のようなエラーが発生してコンパイルが失敗する。
/path/to/project/src/main/java/foo/bar/Int.java:13: エラー: シンボルを見つけられません @Getter(onMethod = @__({ @XmlAttribute(name = "int") })) ^ シンボル: クラス __ 場所: クラス Int /path/to/project/src/main/java/foo/bar/Int.java:13: エラー: 注釈@<any?>に重複y?>'があります。 @Getter(onMethod = @__({@XmlAttribute(name = "int")})) ^
回避策 - getterを手で書く
回避策がlombokを入れた意味があまりなくなってしまう方法で非常に残念である。
@Data @AllArgsConstructor @NoArgsConstructor public class Int { private int value; @XmlAttribute(name = "int") public int getValue() { return value; } }