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.

  • KotlinTest`s BehaviorSpec "No hay methods ejecutables" con SpringJUnit4ClassRunner
  • Restricción de generics Kotlin
  • android-kotlin error: databinding de reference no resuelto & ActivityMainBinding
  • ¿Cómo convertir Lista << MyClass> a List <T>?
  • Cómo poner un elemento en un map y devolver el map
  • Kotlin obtiene valor de JSON
  • Cómo crear una pantalla de inicio en tornadofx
  • Android - Kotlin: valor de retorno en la diversión asíncrona
  • Kotlin Back-Tick escapando en nombres de methods: ¿Cómo funciona?
  • El filtrado de la entidad Hibernate con @Filter no filtra
  • cómo hacer que el subset múltiple sea constante en kotlin