Учебники

Котлин — Расширение

В этой главе мы узнаем о другой новой функции Kotlin, названной «Extension». Используя расширение, мы сможем добавлять или удалять некоторые функции метода, даже не наследуя и не изменяя их. Расширения разрешены статистически. На самом деле он не изменяет существующий класс, но создает вызываемую функцию, которая может быть вызвана с помощью точечной операции.

Расширение функции

В расширении функции Kotlin позволяет определять метод вне основного класса. В следующем примере мы увидим, как расширение реализовано на функциональном уровне.

Live Demo

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
}

В приведенном выше примере у нас нет никакого метода внутри класса «Alien» с именем «addMySkills ()», однако мы все еще реализуем тот же метод где-то за пределами класса. Это волшебство расширения.

Приведенный выше фрагмент кода сгенерирует следующий вывод в браузере.

JAVA SQL

Расширение объекта

Kotlin предоставляет еще один механизм для реализации статической функциональности Java. Это может быть достигнуто с помощью ключевого слова «объект-компаньон». Используя этот механизм, мы можем создать объект класса внутри метода фабрики, а позже мы можем просто вызвать этот метод, используя ссылку на имя класса. В следующем примере мы создадим «объект-компаньон».

Live Demo

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 и может альтернативно называться расширением объекта. Вы в основном расширяете объект того же класса, чтобы использовать некоторые функции-члены.