Kotlin - Genéricos

Como o Java, o Kotlin fornece uma ordem superior de tipagem de variável chamada de Genérica. Neste capítulo, aprenderemos como Kotlin implementa Genéricos e como, como desenvolvedores, podemos usar as funcionalidades fornecidas na biblioteca de genéricos. Em termos de implementação, os genéricos são muito semelhantes a Java, mas o desenvolvedor Kotlin introduziu duas novas palavras-chave“out” e “in” para tornar os códigos Kotlin mais legíveis e fáceis para o desenvolvedor.

Em Kotlin, uma classe e um tipo são conceitos totalmente diferentes. Conforme o exemplo, List é uma classe em Kotlin, enquanto List <String> é um tipo em Kotlin. O exemplo a seguir descreve como os genéricos são implementados em Kotlin.

fun main(args: Array<String>) {
   val integer: Int = 1
   val number: Number = integer
   print(number)
}

No código acima, declaramos um “inteiro” e posteriormente atribuímos essa variável a uma variável numérica. Isso é possível porque “Int” é uma subclasse da classe Number, portanto, a conversão de tipo ocorre automaticamente em tempo de execução e produz a saída como “1”.

Vamos aprender algo mais sobre genéricos em Kotlin. É melhor ir para o tipo de dados genérico sempre que não tivermos certeza sobre o tipo de dados que vamos usar no aplicativo. Geralmente, em Kotlin os genéricos são definidos por<T>onde “T” representa o modelo, que pode ser determinado dinamicamente pelo compilador Kotlin. No exemplo a seguir, veremos como usar tipos de dados genéricos na linguagem de programação Kotlin.

fun main(args: Array<String>) {
   var objet = genericsExample<String>("JAVA")
   var objet1 = genericsExample<Int>(10)
}
class genericsExample<T>(input:T) {
   init {
      println("I am getting called with the value "+input)
   }
}

No trecho de código acima, estamos criando uma classe com tipo de retorno genérico, que é representado como <T>. Dê uma olhada no método principal, onde definimos dinamicamente seu valor na execução, provando o tipo de valor, enquanto criamos o objeto desta classe. É assim que os genéricos são interpretados pelo compilador Kotlin. Obteremos a seguinte saída no navegador, assim que executarmos esse código em nosso campo de codificação.

I am getting called with the value JAVA
I am getting called with the value 10

Quando queremos atribuir o tipo genérico a qualquer um de seus supertipos, precisamos usar a palavra-chave “out”, e quando queremos atribuir o tipo genérico a qualquer um de seus subtipos, precisamos usar “in” palavra-chave. No exemplo a seguir, usaremos a palavra-chave “out”. Da mesma forma, você pode tentar usar a palavra-chave “in”.

fun main(args: Array<String>) {
   var objet1 = genericsExample<Int>(10)
   var object2 = genericsExample<Double>(10.00)
   println(objet1)
   println(object2)
}
class genericsExample<out T>(input:T) {
   init {
      println("I am getting called with the value "+input)
   }
}

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

I am getting called with the value 10
I am getting called with the value 10.0
genericsExample@28d93b30
genericsExample@1b6d3586