この記事はなに? case classを使いながらコンストラクタを隠蔽してファクトリー経由で生成するように強制したい。 ここでいう"コンストラクタ"はnewで生成する通常コンストラクタに加えてcase classで自動生成されるapplyも対象としている。 まとめ sealed abstract case classを使う こちらのコメントをご参照下さい(@aoiroaoino さんありがとうございます) きっちり隠蔽したければcase classは諦めてclassを使う 全部自前で実装するなら コードレビューで頑張れるならcase class使う copyとかが欲しければこちら 色々と頑張れるならメタプロ case classについて Scalaのcase classは非常に便利で、applyやunapplyを自動で生やしてくれる。