Kotlin - Extensão

Neste capítulo, aprenderemos sobre outro novo recurso do Kotlin chamado “Extensão”. Usando a extensão, seremos capazes de adicionar ou remover algumas funcionalidades do método, mesmo sem herdar ou modificá-las. As extensões são resolvidas estatisticamente. Na verdade, ele não modifica a classe existente, mas cria uma função que pode ser chamada que pode ser chamada com uma operação de ponto.

Extensão de função

Na extensão da função, o Kotlin permite definir um método fora da classe principal. No exemplo a seguir, veremos como a extensão é implementada no nível funcional.

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
}

No exemplo acima, não temos nenhum método dentro da classe “Alien” nomeado como “addMySkills ()”, no entanto, ainda estamos implementando o mesmo método em outro lugar fora da classe. Esta é a magia da extensão.

O trecho de código acima irá gerar a seguinte saída no navegador.

JAVA SQL

Extensão de Objeto

Kotlin fornece outro mecanismo para implementar a funcionalidade estática do Java. Isso pode ser alcançado usando a palavra-chave “objeto companheiro”. Usando este mecanismo, podemos criar um objeto de uma classe dentro de um método de fábrica e depois podemos apenas chamar esse método usando a referência do nome da classe. No exemplo a seguir, criaremos um “objeto companheiro”.

fun main(args: Array<String>) {
   println("Heyyy!!!"+A.show())
}
class A {
   companion object {
      fun show():String {
         return("You are learning Kotlin from TutorialsPoint.com")
      }
   }
}

O trecho de código acima produzirá a seguinte saída no navegador.

Heyyy!!! You are learning Kotlin from TutorialsPoint.com

O exemplo acima parece estático em Java, no entanto, em tempo real estamos criando um objeto como uma variável membro dessa mesma classe. É por isso que também está incluído na propriedade de extensão e pode ser alternativamente chamado de extensão de objeto. Basicamente, você está estendendo o objeto da mesma classe para usar algumas das funções-membro.