Open1

【kotlin】data classでファクトリメソッドをなぜ実装しないのか?なぜprivate constructorにしないのか?

ふじしろふじしろ

結論:

※2023年時点
data classを作成するともれなくpublicであるcopy()メソッドが実装されるので、private constractorにしたところで意味がない。

https://youtrack.jetbrains.com/issue/KT-11914/Confusing-data-class-copy-with-private-constructor
(原文)

Proposed solution
The Team has agreed that this behavior should be considered a "design bug". As a result, the intention is to:

  1. Change the default visibility of copy to coincide with that of the constructor,
  2. Provide a migration plan to ensure a smooth transition.

(DeepL訳)

解決策の提案
チームは、この挙動を「設計上のバグ」とみなすことに合意した。その結果、次のような意図がある:

  1. コピーのデフォルトの可視性をコンストラクタの可視性と一致するように変更する、
  2. スムーズな移行を確実にするための移行計画を提供する。

https://discuss.kotlinlang.org/t/data-class-with-private-constructor/25599
data classでもprivate constructorを使いたい、という意見

https://qiita.com/eno314/items/3c3e6c46e3502890b199
現状やろうとすると警告が出る模様。