Шаг 210.
Основы Kotlin.
Расширения. Объявление расширения для суперкласса

    На этом шаге мы рассмотрим пример такого расширения.

    Расширения не полагаются на наследование, но их можно сочетать с наследованием для увеличения области видимости. Попробуйте сделать это в 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)

    На следующем шаге мы рассмотрим обобщенные функции-расширения.




Предыдущий шаг Содержание Следующий шаг