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") } } 
  • patrón Lateinit, perezoso e individual en kotlin
  • Función de extensión booleana
  • ¿Comportamiento incorrecto de Maybe <List <T >> en Room?
  • Ejecuta una class de kotlin con la function principal en el estudio Android
  • Sintaxis de Kotlin para el observador LiveData?
  • ¿Cómo comstackr y usar el código de Kotlin en time de ejecución?
  • Error de renderizado en el editor de layout de Android Studio 3.0
  • TornadoFX filechooser
  • no se puede crear ArrayList dentro de la subclass RealmObject
  • ¿Cómo puedo cambiar la versión del comstackdor de Kotlin en IntelliJ?
  • multiproyecto gradle: el directory de compilation aparece en el directory raíz que contiene los artefactos de Kotlin