对象和数据对象有什么区别?

有一天我注意到,有时我把data放在object的前面,而其他时间则不是:

 object A data object B 

objectdata object什么区别?

在对象声明中允许data的事实实际上是一个应该修复的错误( KT-6486 )。

data是一个注释,它使编译器生成equalshashCodetoStringcopycomponentN函数。 应用于对象声明没有什么意义,原因有两个:

  • 一个对象声明不能有一个构造函数,所有这些函数都是基于主构造函数中定义的属性来工作的。
  • 在运行时只有一个对象的实例。

因此,不会生成componentN函数, copy不能工作,生成的equals / hashCode / toString实现将等同于基于身份的Any的默认实现。