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
TrailLogimplementaLoggerde la manera común.class GuidedTrip(logbook: Logger) : Logger by logbookescribe el reenvío por ti.- La clase suma
departencima y sigue respondiendo cada llamada deLogger.
Palabras clave y builtins usados aquí
Stringbyclassfuninterfaceoverrideval
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.
Paso 2 de 3 en Genéricos y delegación; paso 23 de 27 en Fundamentos del lenguaje.