Kotlin数据类:为什么toString()导出私有属性
这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
。
在有效的Java中,Joshua Bloch写道
提供程序访问toString()返回的值中包含的所有信息
如果你不这样做,你的库的客户端将解析toString()
结果来访问lineNumber
。
有谁知道为什么Kotlin不会隐藏数据类中toString()
私有属性作为默认值?
我不确定为什么Kotlin允许在数据类构造函数中使用私有属性,但是在我看来,对于一个数据类来说 ,“一个类只能保存数据”,所有的数据属性都是公开的,用在equals()
, hashCode()
, toString()
, componentN()
函数和copy()
。
如果不是这种情况,那么我不会调用这样的类“数据类”, equals()
, hashCode()
等应该明确地实现。