此Kotlin数据类
data class PhoneNumber(val prefix: String, private val lineNumber: String)
拥有私有财产lineNumber
。
当我创建一个对象时:
val phoneNumber = PhoneNumber("0676", "123456")
// toString() = PhoneNumber(prefix=0676, lineNumber=123456)
我不希望toString()
函数也公开lineNumber
。
在Effective Java中,Joshua Bloch写道
提供对toString()
返回的值中包含的所有信息的编程访问
如果您不这样做,您图书馆的客户将解析toString()
结果,以便访问lineNumber
。
有没有人知道为什么Kotlin不会在数据类中隐藏toString()
中的私有属性作为默认值?
答案 0 :(得分:4)
我不确定为什么Kotlin允许数据类构造函数中的私有属性,但在我看来,对于data class,“除了保存数据之外什么都不做”的类,你会想要所有的数据属性公开并在equals()
,hashCode()
,toString()
,componentN()
functions和copy()
中使用。
如果不是这种情况,那么我不会将这样的类称为“数据类”,并且应明确实现equals()
,hashCode()
等。