不変オブジェクトは固定状態(セッターなし)なので、オブジェクト作成時にはすべての状態を知る必要があります。
技術的には必要ではありませんが、すべてのフィールドをfinalにすることがベストプラクティスです。これにより、不変クラスがスレッドセーフになります(Java Concurrency in Practice、3.4.1を参照)。
final
この例は、これを達成するのに役立ついくつかのパターンを示しています。