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.