#kotlin
Extension-функции — довольно крутая фича языка Kotlin. Это позволяет расширять функциональность классов без изменения класса. Ну а вызываются эти функции совершенно также, как и те, которые относятся к этому классу, правда выделяются другим цветом в IDE.
Сегодня я нашёл не самую очевидную функциональность, которая позволяет настраивать области видимости этих функций при помощи интерфейсов и дженериков.
Ознакомиться подробнее и почитать примеры можно в этой статье, но в двух словах это выглядит так.
Допустим, у нас есть класс
Vehicle, который может относиться одновременно и к автомобилю, и к космическому кораблю. И есть extension-функция, которая называется:fun Vehicle.cruiseTheBoulevard(): String {
return "cruising the boulevard with my ${getMakeAndModel()}"
}и которую логично применить только для автомобиля.
Вместо описанной выше функции мы можем написать такую, сделав пустой интерфейс:
fun <T> T.cruiseTheBoulevard(): String where T: Vehicle, T: LandVehicle {
return "cruising the boulevard with my ${getMakeAndModel()}"
}Таким образом, мы будем применять эту функцию только для классов, которые являются
Vehicle и LandVehicle. Выглядит немного сложнее, чем стандартная функция, однако о такой возможности тоже полезно знать.