O que são Generics
Generics são uma parte essencial da linguagem Kotlin que permite que escrevamos classes, interfaces, e funções que funcionem com tipos específicos, mas sem declarar esses tipos antecipadamente. Em vez disso, podemos fornecer os tipos quando usarmos essas classes, interfaces ou funções.
Benefícios de usar Generics
Reutilização de código: Você pode escrever classes, interfaces e funções que funcionam com qualquer tipo de dado, aumentando a reutilização do código.
Segurança de tipo: O uso de generics ajuda a detectar erros de tipo em tempo de compilação, o que pode evitar erros em tempo de execução.
Performance: Generics não criam overhead em tempo de execução, pois o tipo é verificado em tempo de compilação.
Como usar Generics em Kotlin
Funções Genéricas
fun <T> listOfNotNull(vararg elements: T?): List<T> {
return elements.filterNotNull()
}
val listaDeInteiros: List<Int> = listOfNotNull(1, 2, null, 4)
Classes Genéricas
class Caixa<T>(val elemento: T)
val caixaDeInteiro = Caixa(10)
val caixaDeString = Caixa("Olá")
Interfaces Genéricas
interface Repositorio<T> {
fun salvar(objeto: T)
fun obter(id: String): T
}
class RepositorioDeCliente : Repositorio<Cliente> {
private val clientes = mutableListOf<Cliente>()
override fun salvar(cliente: Cliente) {
clientes.add(cliente)
println("Cliente salvo: $cliente")
}
override fun obter(id: String): Cliente? {
return clientes.find { it.id == id }
}
}
Restrições de tipos (bounded type parameters)
Em Kotlin, você pode restringir quais tipos podem ser usados como argumentos genéricos. Por exemplo, você pode restringir o tipo genérico a ser uma subclasse de uma determinada classe ou implementar uma determinada interface.
class Caixa<T : Number>(val elemento: T)
val caixaDeInteiro = Caixa(10) // Válido
val caixaDeDouble = Caixa(10.0) // Válido
val caixaDeString = Caixa("Olá") // Erro de compilação
Conclusão
Generics são uma ferramenta poderosa em Kotlin, que permite escrever código flexível, seguro e reutilizável. Espero que este artigo tenha ajudado você a entender como usar generics em suas aplicações.
Top comments (0)