Kotlin数据类:为什么toString()导出私有属性

时间:2016-12-29 10:50:51

标签: kotlin

此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()中的私有属性作为默认值?

1 个答案:

答案 0 :(得分:4)

我不确定为什么Kotlin允许数据类构造函数中的私有属性,但在我看来,对于data class,“除了保存数据之外什么都不做”的类,你会想要所有的数据属性公开并在equals()hashCode()toString()componentN() functionscopy()中使用。

如果不是这种情况,那么我不会将这样的类称为“数据类”,并且应明确实现equals()hashCode()等。