Котлин - Расширение
В этой главе мы узнаем о еще одной новой функции Kotlin под названием «Расширение». Используя расширение, мы сможем добавлять или удалять некоторые функции метода, даже не наследуя или не изменяя их. Расширения разрешены статистически. Фактически он не изменяет существующий класс, но создает вызываемую функцию, которую можно вызвать с помощью операции с точкой.
Расширение функций
В расширении функций Kotlin позволяет определять метод вне основного класса. В следующем примере мы увидим, как расширение реализовано на функциональном уровне.
class Alien {
var skills : String = "null"
fun printMySkills() {
print(skills)
}
}
fun main(args: Array<String>) {
var a1 = Alien()
a1.skills = "JAVA"
//a1.printMySkills()
var a2 = Alien()
a2.skills = "SQL"
//a2.printMySkills()
var a3 = Alien()
a3.skills = a1.addMySkills(a2)
a3.printMySkills()
}
fun Alien.addMySkills(a:Alien):String{
var a4 = Alien()
a4.skills = this.skills + " " +a.skills
return a4.skills
}
В приведенном выше примере у нас нет никакого метода внутри класса «Чужой» с именем «addMySkills ()», однако мы по-прежнему реализуем тот же метод где-то еще за пределами класса. Это магия расширения.
Приведенный выше фрагмент кода сгенерирует следующий вывод в браузере.
JAVA SQL
Расширение объекта
Kotlin предоставляет еще один механизм для реализации статической функциональности Java. Этого можно добиться с помощью ключевого слова «объект-компаньон». Используя этот механизм, мы можем создать объект класса внутри фабричного метода, а позже мы можем просто вызвать этот метод, используя ссылку на имя класса. В следующем примере мы создадим «объект-компаньон».
fun main(args: Array<String>) {
println("Heyyy!!!"+A.show())
}
class A {
companion object {
fun show():String {
return("You are learning Kotlin from TutorialsPoint.com")
}
}
}
Приведенный выше фрагмент кода даст в браузере следующий результат.
Heyyy!!! You are learning Kotlin from TutorialsPoint.com
Приведенный выше пример кажется статичным в Java, однако в реальном времени мы создаем объект как переменную-член того же класса. Вот почему он также включен в свойство extension и в качестве альтернативы может называться расширением объекта. Вы в основном расширяете объект того же класса для использования некоторых функций-членов.