为什么我不能让每一个Kotlin类都成为一个数据类?
当然,我排除了任何涉及违反数据类规则的理由。 所以如果你知道你不需要继承它(虽然我的理解是规则在Kotlin1.1中消失)。
- 制作一个数据类有什么不利之处?
- 为什么所有符合条件的类都只能提供数据类的功能呢? 这应该都可以被编译器检测到而不需要特殊的关键字。 当然这个答案可能是显而易见的,取决于问题1的答案。
- 我是否有理由不把所有符合条件的类标记为数据类?
data
修饰符使Kotlin生成常用的方法,如toString
, hashCode
, equals
基于主构造函数的最常见(%80)方案。
这显示了为什么只有几个班级应该是data
三个原因:
-
大多数非数据类在主构造器和类的主体中定义了混合的属性。 另外,主要的构造函数通常具有不是字段的参数(但是帮助初始化正文中的更复杂的字段)。 换句话说,
data
具有非常严格的要求,而这些要求很少被常规课程满足。 -
除了第一点,制作班级
data
可能会影响其扩展性。 即使所讨论的类的布局符合data
类的规则,稍后有人可能想要在类的主体中添加另一个属性。 在这种情况下,他将不得不手动重写hashCode
因为它可能在某个地方使用。 -
标记一个类的
data
发送一个消息给阅读你打算使用这个类作为数据职业的代码。 标注其他课程将会产生误导。
因为一个OO编程的基本原理:封装。 通过设计,我们故意限制其他代码可以与模块进行交互的方式。 这给了我们可维护性(更强大的重构)和可读性