きり丸の技術日記

技術検証したり、資格等をここに残していきます。

Lombokで自動生成されるGetterのprefixを変更したかった(Accessor prefixが使いたかった)

うまくいかなかったことのメモ。

環境

  • IntelliJ IDEA
    • 2021.3.3 (Ultimate Edition)
  • 2022/05/07時点

きっかけになったツイート

twitter.com

APIのリクエストBodyにて、日付フォーマット「yyyyMMdd」で受け取りたい。ただ、LocalDate型に変換することもある。そのようなコードを書く場合、普段は次のコードのように記載しています。

@Value
@AllArgsConstructor
public class RequestDate {
  private String value;
  private LocalDate localDate;

  private static final DateTimeFormatter SHORT_DATE_FORMATTER =
      DateTimeFormatter.ofPattern("uuuuMMdd");

  public static RequestDate of(String value) {
    return new RequestDate(value, LocalDate.parse(value, SHORT_DATE_FORMATTER));
  }
}

getValue()メソッドでString型を返却したり、getLocalDate()メソッドでLocalDate型を返却していました。

受け取ったパラメータをそのまま返却するという意味でgetValue()としていたが、いい感じにString型やLocalDate型を返却することが分かるメソッド名にしたいと思っていた。

ツイートにあるとおりasString()asLocalDateというGetterを生成できれば、Getterであることを示しつつ、返却型を明示できると考えました。

LombokのGetterのPrefixをgetではなく、asにするだけで対応できるかと思い、まさにそれを達成できる@Accessors(prefix = "as")というアノテーションをみつけました。

…が、ここで大きな問題。

私が普段使用しているIDEのIntelliJ IDEAだと次のような警告が発生して、Getterが生成されませんでした。

Not generating getter for this field: It does not fit your @Accessors prefix list

一応、IntelliJ IDEAのプラグインを修正すれば直せそうですが、そこまでして直すモチベーションはないので、この対応はしないことにします。

終わりに

JavaのRecordのGetterのprefixを修正できるならそれでもいいのですが、そういうこともできそうにないです。

もちろん、自作でasString()asLocalDate()というメソッドを作ってもいいのですが、わざわざその工数を確保してまで得られるメリットもないので、とりあえず現状のままにしようと思います。

参考情報