DEV Community

Jackie Nascimento
Jackie Nascimento

Posted on

Entendendo Generics em Kotlin

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)
Enter fullscreen mode Exit fullscreen mode

Classes Genéricas

class Caixa<T>(val elemento: T)

val caixaDeInteiro = Caixa(10)
val caixaDeString = Caixa("Olá")
Enter fullscreen mode Exit fullscreen mode

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 }
    }
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)