うまくいかなかったことのメモ。
環境
- IntelliJ IDEA
- 2021.3.3 (Ultimate Edition)
- 2022/05/07時点
きっかけになったツイート
twitter.comなるほど。
— きり丸 (@nainaistar) 2022年5月5日
APIでyyyymmddのフォーマットを期待するrequest date型を用意してたけど、そこからlocaldateに変換するときにメソッド名をどうするか少し困ってた。
as string
as localdate
ってメソッドを用意すればわかりやすい。 https://t.co/hHMG6YtFoA
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()
というメソッドを作ってもいいのですが、わざわざその工数を確保してまで得られるメリットもないので、とりあえず現状のままにしようと思います。