Java における value objects
Java 標準 API のドキュメントには、 "値ベース・クラス" というページがあります:
現在の Java [1] における value objects は、この値ベース・クラスの要件に沿ったクラスをインスタンス化したもの、と考えて良さそうに思いました。次の点が注目ポイントでしょうか:
-
インスタンスフィールドは
final
-
==
,!=
を用いて比較してはいけない。 インスタンスフィールドの値で比較する(equals()
をそのように実装して、それを用いる)。
ちなみに、 Java16 以降では、JDK の中の値ベース・クラスに相当するクラスには jdk.internal.ValueBased
アノテーションが付与されているようです(このアノテーションの目的は JEP390 にあります。 Project Valhalla の準備として、不適切に利用されている箇所でコンパイル時に警告するためのようです)。
1. Project Valhalla 導入後はまた話が変わるはずです。