Constructores de Kotlin: primarios y secundarios

Acabo de comenzar con Kotlin , donde puedes tener un constructor primario y secundarios . La pregunta puede sonar simple, pero no pude encontrar una respuesta (he leído la sección de "constructores" en la documentation) – ¿por qué ?

Básicamente, estoy tratando de entender cuál es la idea detrás de ser primario y secundario. ¿Y cuál es la diferencia en cómo se usan (parece que no hay, entonces, ¿por qué la separación)?

Hay varias diferencias sintácticas, claramente. Pero una gran diferencia conceptual es que todos los constructores secundarios finalmente delegan al constructor primario.

La forma en que pienso sobre esto es que el constructor primario es la interfaz canónica para crear un object, y los constructores secundarios son como ayudantes estáticos para transformar otros sets de arguments para cumplir con esta interfaz. *


* Tenga en count que esta es una interpretación personal, no respaldada con documentos oficiales de ninguna manera.

el constructor primario de kotlin te ayuda a escribir el código compacto :

  • puedes escribir una class sin cuerpo, por ejemplo: data class , por ejemplo:

     data class Data(val value:String) 
  • si no tiene ninguna anotación en el constructor, entonces se puede omitir el constructor de la palabra key. un ejemplo negativo:

     class Foo @Annotation constructor() 
  • hace que la inheritance sea simple, por ejemplo:

     open class Bar(val value: String); class Primary(value: String, other: String) : Bar(value) class Secondary : Bar { constructor(value: String, other: String) : super(value) } 
  • puede usar delegaciones por palabra key by , pero el constructor secundario no puede usar.

     interface Rule { fun apply(value: String): Int } open class Policy(rule: Rule) : Rule by rule; 
  • Cómo agregar funcionalidad +/- a un butting en Android kotlin
  • Filtrar datos de una colección con una cadena específica
  • ¿Es posible deshabilitar sugerencias para parameters sin nombre en Android Studio?
  • Configuración de un proyecto multiplataforma
  • El service está creando una nueva instancia de mediaplayer
  • Java Wildcard-types vs Kotlin Star-projection
  • Kotlin, Java, multidex, Dagger 2, Butterknife y Realm: transformClassesWithJarMergingForDebug: input duplicada: org / jetbrains / annotations / NotNull.class
  • Agregar vista personalizada a includedView
  • Cuenta el número de dígitos en Kotlin
  • Jacoco informa 0 cobertura de classs de Kotlin por testings unitarias, en un proyecto de Android
  • ¿Cuál es la razón para usar el sufijo "Kt" en las classs de Kotlin?