为什么我不让每个符合条件的 Kotlin 类都成为数据类?

zju*_*asz 6 language-design kotlin

我当然排除了任何涉及违反数据类规则的原因。因此,如果你知道你不需要继承它,例如(尽管我的理解是规则在 Kotlin 1.1 中消失了)。

  1. 使类成为数据类有什么缺点吗?
  2. 为什么只要符合条件的类仍然符合条件,为什么不是所有符合条件的类都提供数据类的功能?这应该可以被编译器检测到,而不需要特殊的关键字。当然,根据问题 1 的答案,这个问题的答案可能很明显。
  3. 我是否有任何理由不将所有符合条件的类标记为数据类?

vod*_*dan 6

data修饰符使 Kotlin基于主构造函数为最常见 (%80) 场景生成常用方法,如toString, hashCode, equals

这显示了为什么只有少数类应该是 3 个原因data

  1. 大多数非数据类在主构造函数和类主体中都定义了混合属性。此外,主构造函数通常具有不是字段的参数(但有助于初始化主体中更复杂的字段)。换句话说,data具有非常严格的要求,常规课程很少满足。

  2. 除了第 1 点,创建一个类data可能会损害它的可扩展性。即使有问题的类的布局符合data类的规则,后来有人可能想在类的主体中添加另一个属性。在这种情况下,他将不得不手动覆盖,hashCode因为它可能会在某处使用。

  3. 标记一个类会data向阅读代码的人发送一条消息,即您打算将此类用作数据职业。标记其他类会产生误导。

  • 此外,生成的 `copy` 和 `componentX` 方法增加了代码大小和方法数量。 (2认同)