对象和数据对象有什么区别?
有一天我注意到,有时我把data
放在object
的前面,而其他时间则不是:
object A data object B
object
和data object
什么区别?
在对象声明中允许data
的事实实际上是一个应该修复的错误( KT-6486 )。
data
是一个注释,它使编译器生成equals
, hashCode
, toString
, copy
和componentN
函数。 应用于对象声明没有什么意义,原因有两个:
- 一个对象声明不能有一个构造函数,所有这些函数都是基于主构造函数中定义的属性来工作的。
- 在运行时只有一个对象的实例。
因此,不会生成componentN
函数, copy
不能工作,生成的equals
/ hashCode
/ toString
实现将等同于基于身份的Any
的默认实现。