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") } } 
  • ¿Forma idiomática de transformar el map en kotlin?
  • ¿Proporcionando object burlado a otro constructor de object falso?
  • Kotlin || ¿No puedo agregar la biblioteca a Mi aplicación?
  • Kotlin: ¿cómo devolver la instancia del service en ejecución en la carpeta?
  • Kotlin: get una Referencia a una instancia de la Función de una Clase
  • ¿Cómo verificar si Mono está vacío?
  • ¿Por qué Gradle construye el código fuente de Kotlin haciendo una pausa de ~ 3 segundos "forzando System.gc ()"?
  • kotlin cómo referir el scope externo esto en funciones de aplicación multicapa
  • ¿Los saltos de línea en cadenas sin formatting dependen de la plataforma?
  • Diferencia de tipo inesperada entre el código equivalente de Java y Kotlin Stream
  • cómo usar cursorloader con kotlin