1. ホーム
  2. scala

[解決済み] Scalaのcaseクラスを宣言することのデメリットは何ですか?

2022-11-16 07:44:42

質問

もしあなたが、美しく、不変のデータ構造をたくさん使うコードを書いているなら、ケースクラスは、たった一つのキーワードで、次のすべてを無料で与えてくれる、天の恵みのように見えます。

  • デフォルトですべてイミュータブル
  • ゲッターは自動的に定義される
  • まともな toString() の実装
  • equals()とhashCode()の実装に準拠。
  • マッチングのための unapply() メソッドを持つコンパニオン・オブジェクト。

しかし、イミュータブルなデータ構造をケースクラスとして定義することのデメリットは何でしょうか?

クラスやそのクライアントにどのような制約があるのでしょうか?

ケースでないクラスを好むべき状況はありますか?

どのように解決するのですか?

大きな欠点は、ケースクラスはケースクラスを拡張できないことです。という制約があります。

あなたが見逃した他の利点は、完全を期すために列挙します: 準拠したシリアライズ/デシリアライズ、作成に "new" キーワードを使用する必要がないこと。

私は、変更可能な状態、プライベートな状態、または状態なし(たとえば、ほとんどのシングルトン構成要素)を持つオブジェクトのために、非ケースクラスを好みます。 他のほとんどすべてのためにケースクラス。