На этом шаге мы рассмотрим пример такого расширения.
Расширения не полагаются на наследование, но их можно сочетать с наследованием для увеличения области видимости. Попробуйте сделать это в Extensions.kt: объявите расширение для типа Any с именем easyPrint. Так как расширение объявлено для Any, оно будет доступно для всех типов. В main() замените вызов функции println() вызовом расширения easyPrint для String.
fun String.addEnthusiasm(amount: Int = 1) = this + "!".repeat(amount) fun Any.easyPrint() = println(this) fun main(args: Array<String>) { "Madrigal has left the building".addEnthusiasm().easyPrint() }
Рис.1. Расширение Any (Extensions.kt)
Запустите Extensions.kt и убедитесь, что вывод не изменился.
Так как вы добавили расширение для типа Any, оно доступно и для подтипов. Добавьте вызов расширения для Int.
fun String.addEnthusiasm(amount: Int = 1) = this + "!".repeat(amount) fun Any.easyPrint() = println(this) fun main(args: Array<String>) { "Madrigal has left the building".addEnthusiasm().easyPrint() 42.easyPrint() }
Рис.2. easyPrint доступно для всех подтипов (Extensions.kt)
На следующем шаге мы рассмотрим обобщенные функции-расширения.