为什么我不能让每一个Kotlin类都成为一个数据类?

当然,我排除了任何涉及违反数据类规则的理由。 所以如果你知道你不需要继承它(虽然我的理解是规则在Kotlin1.1中消失)。

  1. 制作一个数据类有什么不利之处?
  2. 为什么所有符合条件的类都只能提供数据类的功能呢? 这应该都可以被编译器检测到而不需要特殊的关键字。 当然这个答案可能是显而易见的,取决于问题1的答案。
  3. 我是否有理由不把所有符合条件的类标记为数据类?

data修饰符使Kotlin生成常用的方法,如toStringhashCodeequals基于主构造函数的最常见(%80)方案。

这显示了为什么只有几个班级应该是data三个原因:

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

  2. 除了第一点,制作班级data可能会影响其扩展性。 即使所讨论的类的布局符合data类的规则,稍后有人可能想要在类的主体中添加另一个属性。 在这种情况下,他将不得不手动重写hashCode因为它可能在某个地方使用。

  3. 标记一个类的data发送一个消息给阅读你打算使用这个类作为数据职业的代码。 标注其他课程将会产生误导。

因为一个OO编程的基本原理:封装。 通过设计,我们故意限制其他代码可以与模块进行交互的方式。 这给了我们可维护性(更强大的重构)和可读性