Clases de datos de Kotlin: por qué toString () exporta properties privadas

Esta class de datos de Kotlin

data class PhoneNumber(val prefix: String, private val lineNumber: String) 

tiene la propiedad privada lineNumber .

Cuando creo un object:

 val phoneNumber = PhoneNumber("0676", "123456") // toString() = PhoneNumber(prefix=0676, lineNumber=123456) 

No espero que la function toString() también exponga lineNumber .

En Java efectivo, Joshua Bloch escribe

Proporcionar acceso programático a toda la información contenida en el valor devuelto por toString ()

Si no lo hace, los clientes de su biblioteca analizarán el resultado toString() para get acceso a lineNumber .

¿Alguien sabe por qué Kotlin no oculta las properties privadas en toString() en las classs de datos de forma pnetworkingeterminada?

No estoy seguro de por qué Kotlin permite properties privadas en constructores de class de datos, pero me parece que para una class de datos , "una class que no hace más que contener datos", querría que todas las properties de datos sean públicas y estén utilizado en las hashCode() equals() , hashCode() , toString() , componentN() y copy() .

Si este no es el caso, entonces no llamaría a esa class una "class de datos" y equals() , hashCode() , etc. deberían implementarse explícitamente.

  • Swift - Salir de la function externa desde el cierre
  • kartlin startactivity con banderas
  • Firebase @Exclude con la class de datos kotlin
  • Método de llamada de la class Kotlin
  • Comstackción manual de JAR para Scala & Kotlin
  • ¿Cómo usar Kotlin async y esperar por factoriales?
  • NoSuchMethodError al llamar al método
  • Cómo especificar "propio tipo" como tipo de devolución en Kotlin
  • Sin setter / getter para objects Firebase
  • GridView dentro de ListRow usando la biblioteca de Leanback
  • Propiedad de superclass no inicializada en class Derivada