对象和数据对象之间的区别是什么?

时间:2015-08-29 17:18:02

标签: singleton kotlin

前几天我注意到我有时会在data s前面放object,而有时则不在:{/ p>

object A

data object B

objectdata object之间有什么区别?

1 个答案:

答案 0 :(得分:10)

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

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

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

因此,不会生成componentN个函数,copy无法正常工作,生成的equals / hashCode / toString实现将是相当于Any中基于身份的默认值。