Расширения в Kotlin позволяют добавлять новые функции или свойства к существующим классам без наследования от них или использования декоратора.
Основные концепции:
Функции-расширения (Extension Functions): Добавляют новые методы к классам.
kotlin
Ключевое слово this внутри функции-расширения ссылается на объект, для которого вызывается расширение (в примере выше на myString).
Свойства-расширения (Extension Properties): Позволяют добавлять новые свойства к классам, но не могут иметь состояния, то есть не могут хранить данные. Они вычисляются при каждом обращении к ним.
kotlin
Свойства-расширения должны иметь геттер. Сеттер опционален.
Особенности:
Статическая диспетчеризация: Вызов расширения определяется типом переменной, а не типом объекта во время выполнения. Это отличается от виртуальных методов в объектно-ориентированном программировании.
kotlin
Приватные и protected члены: Расширения не могут обращаться к приватным или protected членам класса, который они расширяют.
Companion Object Extensions: Можно расширять объекты-компаньоны класса.
kotlin
Область видимости (Visibility): Расширения должны быть объявлены в файле и затем импортированы для использования в других файлах.
Расширения - мощный инструмент для создания читаемого и гибкого кода, позволяющий добавлять функциональность к классам из сторонних библиотек без изменения их исходного кода.