typestar

Delegación con by en Kotlin

Reenvía una interfaz completa a una instancia envuelta en una cláusula.

interface Logger {
    fun log(line: String)
}

class TrailLog : Logger {
    override fun log(line: String) = println("[log] $line")
}

// by hands every Logger call to the wrapped instance -- no boilerplate.
class GuidedTrip(logbook: Logger) : Logger by logbook {
    fun depart(trail: String) = log("Departing $trail")
}

fun main() {
    val trip = GuidedTrip(TrailLog())
    trip.depart("Ridgeline")
    trip.log("All hikers accounted for")
}

Cómo funciona

  1. TrailLog implementa Logger de la manera común.
  2. class GuidedTrip(logbook: Logger) : Logger by logbook escribe el reenvío por ti.
  3. La clase suma depart encima y sigue respondiendo cada llamada de Logger.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
423
Tokens
95
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 88 segundos.

Escribe este fragmento

Paso 2 de 3 en Genéricos y delegación; paso 23 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →