Extension-функции — одна из фишек Kotlin, дающая синтаксический сахар. Это способ «добавить» новую функцию существующему типу без наследования или декоратора.
fun String.firstChar(): Char = this[0]
val c = "Nurlan".firstChar() // 'N'
Как работают extension-функции под капотом?
Это обычные статические функции, которым компилятор даёт особый синтаксис.
//Kotlin
fun String.firstChar(): Char = this[0]
//Java
public static final char firstChar(@NotNull String $this$firstChar) {
return $this$firstChar.charAt(0);
}
То есть:
this
→ просто аргумент- никакого изменения класса
String
не происходит - никакого полиморфизма — просто синтаксический трюк
Можно ли делать extension к интерфейсу?
Да, можно!
interface Clickable {
fun click()
}
fun Clickable.logClick() {
println("Clicked!")
}
Но важно: если объект реализует интерфейс, и ты вызываешь extension — он не может переопределить её