Да, Kotlin имеет Extensions
- аналогично Swift .
Swift :
class C {
func foo(i: String) { print("class") }
}
extension C {
func foo(i: Int) { print("extension") }
}
C().foo(i: "A")
C().foo(i: 1)
Kotlin :
class C {
fun foo(i: String) { println("class") }
}
fun C.foo(i: Int) { println("extension") }
C().foo("A")
C().foo(1)
Вывод :
class
extension
Есть некоторые ключевые отличия, которые вы хотитечитать дальше.
Расширения фактически не изменяют классы, которые они расширяют.Определяя расширение, вы не вставляете новые члены в класс, а просто делаете их вызываемыми с помощью точечной нотации для переменных этого типа.
Мы хотели бы подчеркнуть, что функции расширения отправляются статически,то есть они не являются виртуальными по типу приемника.Это означает, что вызываемая функция расширения определяется типом выражения, для которого вызывается функция, а не типом результата вычисления этого выражения во время выполнения.
↳ https://kotlinlang.org/docs/reference/extensions.html