Declaraciones en el constructor de Kotlin

¿Hay alguna manera de mezclar declaraciones (como declaraciones impresas) y asignaciones de miembros en Kotlin? Aquí hay un ejemplo de lo que me gustaría hacer (en Java):

class MySystem { ComponentA componentA; ComponentB componentB; public MySystem() { System.out.println("Initializing components"); this.componentA = new ComponentA(); System.out.println("Constructed componentA"); this.componentB = new ComponentB(); System.out.println("Constructed componentB"); } } 

Agradecido por cualquier input, gracias.

Sí, hay: use los bloques init . Los bloques de init y los inicializadores de properties se ejecutan en el mismo order en que aparecen en el código:

 class MyClass { init { println("Initializing components") } val componentA = ComponentA() init { println("Constructed componentA") } val componentB = ComponentB() init { println("Constructed componentA") } } 

O, como alternativa, separe la statement y la initialization:

 class MyClass { val componentA: ComponentA val componentB: ComponentB init { println("Initializing components") componentA = ComponentA() println("Constructed componentA") componentB = ComponentB() println("Constructed componentB"); } } 

Esto también funcionará con constructores secundarios.

Declare los campos y use un bloque de inicio:

 internal class MySystem { val componentA: ComponentA val componentB: ComponentB init { println("Initializing components") this.componentA = ComponentA() println("Constructed componentA") this.componentB = ComponentB() println("Constructed componentB") } } 
  • ¿Por qué el comstackdor de Scala me da un error al pasar una class sellada de Kotlin a un constructor?
  • Crea una aplicación de Android escrita en Kotlin usando el sistema de compilation Buck
  • Notificación de Android no aparece en la API 26
  • Error de compilation de la llamada insegura de Kotlin en un receptor nulo después de un control nulo
  • ¿En qué situación val / var es necesaria en el parámetro constructor de Kotlin?
  • ¿Cuáles son las semánticas de initialization de la class Kotlin?
  • Usando Kovenant de Kotlin sigo entrando en código repetitivo usando Diferido
  • Jackson no puede cargar types JDK7 en Android
  • Kotlin renombrando Getters Generados y Setters
  • ¿Tiene Kotlin un equivalente a opciones opcionales de envoltura implícita en Swift?
  • Cómo iniciar la propiedad de matriz de la anotación en Kotlin