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 si lo dejas y más en Kotlin
  • Métodos de ciclo de vida en lenguajes tipados estáticamente
  • "No se puede encontrar la class referenceda" con Proguard y Kotlin
  • Cómo acceder a la variable de instancia en un object complementario estático en Koltin
  • Parsing xml kotlin android
  • ¿Cómo puedo ofuscar mi sdk codificado con kotlin (y deshacerme de Metadata)
  • android anko alert layout personalizado currentFocus
  • Cómo convertir un file fuente kotlin a un file fuente java
  • ¿Por qué la animation de salida de Fragment no funciona?
  • RxJava manejador de error pnetworkingeterminado
  • Completable.andThen resultados en "other is null"