Kotlin の似たようなクラス
(昔書きかけて完成していないっぽいですが、置いておいても忘れるだけなのでcommitしてしまいます)
value object のことを調べていたら、 Kotlin にぱっと見似たような異なるクラス定義方法があることに気付いたので、それらについてまとめておきます。
data classes
Kotlin プログラマなら馴染みのあるクラスだと思うのでここで詳しく説明する必要はないでしょう。
equals()
(及び hashCode()
)を自動生成する性質などを鑑みると、(更に言うと、 copy()
を備えていることから immutable な) value object(Wikopedia) を構築するためのクラスと見做して差し支えないと考えます(もちろん var
でプロパティを宣言することもできますし、 equals()
もオーバーライドできはしますが)。
Java の record classes
や、 Lombok の @Value
(+ @With) と同じ方向性のクラスですね。
(ちなみに data class
に @JvmRecord
アノテーションを付与すると Java の record
としてコンパイルされるみたいですね。)
inline classes
1.5.0 から正式導入されました(ので、 Kotlin in Action で入門した私は知らなかった…)。 次節で説明する value-based classes のサブセット。
@JvmInline
value class Password(val s: String)
のように書きます。
(value-based classes のサブセットである inline classes 、なのに value
というキーワードで定義するのが混乱を招きそう…)