对象声明允许data
的事实实际上是一个应该修复的错误(KT-6486)。
data
是一个注释,它使编译器生成equals
,hashCode
,toString
,copy
和componentN
函数。当应用于对象声明时,它没有多大意义,原因有两个:
- 对象声明不能有构造函数,所有这些函数都基于主构造函数中定义的属性工作。
- 运行时只有一个对象的一个实例。
因此,不会生成componentN
个函数,copy
无法正常工作,生成的equals
/ hashCode
/ toString
实现将是相当于Any
中基于身份的默认值。