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