Múltiples constructores

Los desarrolladores de Android llevaban mucho tiempo esperándolo. Porque la herencia estándar de las vistas de Android requiere tener más de un constructor. A partir de la M11 es posible hace esto:

class MyView : View {
    constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) {
        // ...
    }

    constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) {}
}

Esta característica está documentada en la documentación de usuario y en la especificación del lenguaje.

Nuevo keyword para bloques de inicialización

Otro cambio también relacionado con la construcción de objetos, es que a partir de ahora hay que añadir el keyword init en los bloques de inicialización de objetos.

Debido a que el lenguaje soporta una lambda después de una llamada, el compilador se podía confundir en determinados casos. Por ejemplo:

class Foo {
    val bar = baz() // Aquí se produce un ERROR

    {
        // inicializador pre-M11
    }
}

La nueva sintaxis es la siguiente:

class Foo {
    val bar = baz()

    init {
        // inicializador
    }
}