Wie voddan im Kommentar erwähnt, eine Methode mit einer Erweiterung nicht beschatten können. Es gibt jedoch eine Möglichkeit, dies mit etwas Polymorphismus zu umgehen. Ich denke nicht, dass ich das in deinem Fall empfehlen würde, aber ich denke, es zeigt eine coole Kotlin-Funktion.
Wenn b[0]
ein Objekt vom Typ zurückgibt B
, können Sie dies in dieser Klasse tun:
data class B(private val _teachers: List<Teacher> = emptyList()) {
private class Teachers(private val list: List<Teacher>) : List<Teacher> by list {
override operator fun get(int: Int): Teacher {
var t = Teacher()
t.name = "asd"
return t ;
}
}
val teachers: List<Teacher> = Teachers(_teachers)
}
fun main(args: Array<String>) {
println(B().teachers[0].name) // Prints "asd"
}
Wenn ich überschreiben die get
-function es jeden betreffen wird, die die B
-Klasse verwendet, nicht nur, wo würden Sie Importieren Sie die Erweiterungsfunktion.
Beachten Sie, dass ich alle anderen Methodenaufrufe auf die Teachers
-Klasse zu der zugrunde liegenden Liste delegieren.
Sie können eine Methode mit einer Erweiterung – voddan