ist hier ein minimales Beispiel, das das Problem veranschaulicht:Wie rufe ich Erweiterungsmethoden von außerhalb der Klasse auf, in der sie definiert sind?
abstract class Base {
abstract fun String.extension(x: Char)
}
class Derived : Base() {
override fun String.extension(x: Char) {
// Calling lots of methods on String, hence extension method
println("${first()} $length ${last()} ${firstOrNull { it == x }} ...")
}
}
die Erweiterungsmethode von Java Aufruf ist trivial:
Base o = new Derived();
o.extension("hello world", 'l');
Aber ich kann nicht herausfinden, wie es in der reinen Kotlin zu tun. Weder String
noch Base
scheint dieMethode zu haben.
Sie können hinzufügen, dass Erweiterung _functions_ auch funktioniert. –
@KirillRakhman, habe das nicht verstanden, könnten Sie bitte erklären? – hotkey
Was ich meinte ist, dass nicht nur die Erweiterung _lambdas_, sondern auch extension_functions_ verwendet werden kann, um den impliziten Empfänger bereitzustellen. Beispiel: 'fun cinScope() =" ".extended()' –