⏩Можно ли организовать свое собственное расширение в Kotlin? Да, это можно сделать через
Delegate:class MyString {
fun myPrint(text: String) {
println(text)
}
}⏩Есть класс
MyString с методом myPrint(). Допустим нам надо сделать собственное расширение printRealExt() без использование встроенных в Kotlin возможностей:fun MyString.printRealExt(text: String) {
println(text)
}⏩Реализуем интерфейс и класс с нашим методом "расширения":
interface ExtensionPrint {
fun printExt(text: String)
}
class ExtensionPrintImpl : ExtensionPrint {
override fun printExt(text: String) {
println(text)
}
}⏩А затем воспользовавшись
Delegation делегируем этот метод:class MyString : ExtensionPrint by ExtensionPrintImpl() {
fun myPrint(text: String) {
println(text)
}
}⏩Синтаксис вызова из расширения и из делегата выглядит одинаково:
val myString = MyString()
myString.printRealExt("Real ext")
myString.printExt("Text from ext")
⏩Таким же образом можно организовать множественное наследование в Kotlin:
interface OneClassInterface {
fun someOne()
}
class OneClassImpl : OneClassInterface {
override fun someOne() {
println("some One")
}
}
interface TwoClassInterface {
fun someTwo()
}
class TwoClassImpl : TwoClassInterface {
override fun someTwo() {
println("someTwo")
}
}
class DerivedClass : OneClassInterface by OneClassImpl(), TwoClassInterface by TwoClassImpl()@android_its
