Funções e Classes Genéricas
Parametrize os tipos
Funções e Classes Genéricas é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.
O que são genéricos?
Genéricos permitem escrever código que funciona com vários tipos, mantendo a segurança total de tipos. Em vez de fixar um tipo concreto, você usa um parâmetro de tipo, geralmente T, como marcador.
Uma função genérica
Uma função genérica declara seu parâmetro de tipo entre sinais de menor e maior antes do nome da função. Aqui, T pode ser qualquer tipo.
fun <T> identity(value: T): T {
return value
}
fun main() {
println(identity(42))
println(identity("hello"))
}Inferência de tipos
Você raramente precisa especificar o tipo explicitamente; o compilador infere T a partir dos argumentos. Ainda assim, você pode escrevê-lo como identity<Int>(42) quando necessário.
fun <T> firstOf(a: T, b: T): T = a
fun main() {
val x = firstOf(10, 20)
val y = firstOf("a", "b")
println("$x $y")
}Vários parâmetros de tipo
Uma função pode ter vários parâmetros de tipo, o que é útil para trabalhar com pares de tipos não relacionados.
fun <A, B> makePair(first: A, second: B): Pair<A, B> {
return Pair(first, second)
}
fun main() {
val p = makePair("age", 30)
println(p)
}Uma classe genérica
As classes também podem ser genéricas. O parâmetro de tipo é declarado depois do nome da classe e pode ser usado em propriedades e funções.
class Box<T>(val value: T) {
fun get(): T = value
}
fun main() {
val intBox = Box(123)
val strBox = Box("Kotlin")
println(intBox.get())
println(strBox.get())
}Classe genérica com comportamento
Classes genéricas podem manter estado mutável e operar sobre o parâmetro de tipo, como um contêiner simples.
class Stack<T> {
private val items = mutableListOf<T>()
fun push(item: T) { items.add(item) }
fun pop(): T = items.removeAt(items.size - 1)
fun isEmpty() = items.isEmpty()
}
fun main() {
val stack = Stack<Int>()
stack.push(1)
stack.push(2)
println(stack.pop())
}Interfaces genéricas
As interfaces também podem declarar parâmetros de tipo, permitindo que as implementações escolham o tipo concreto.
interface Container<T> {
fun item(): T
}
class StringContainer : Container<String> {
override fun item(): String = "fixed"
}
fun main() {
println(StringContainer().item())
}Por que não usar apenas Any?
Você poderia armazenar valores como Any, mas perderia as informações de tipo e precisaria fazer conversões de tipo. Os genéricos preservam o tipo exato, permitindo que o compilador detecte erros sem a necessidade de conversões.
fun main() {
val box: Box<String> = Box("text")
val s: String = box.get()
println(s.uppercase())
}
class Box<T>(val value: T) { fun get(): T = value }Funções de extensão genéricas
As funções de extensão podem ser genéricas, permitindo criar utilitários reutilizáveis para todos os tipos.
fun <T> T.printAndReturn(): T {
println("Value: $this")
return this
}
fun main() {
val x = 5.printAndReturn()
"hi".printAndReturn()
println(x)
}Convenções de nomenclatura
Por convenção, letras maiúsculas únicas nomeiam parâmetros de tipo: T para um tipo genérico, E para um elemento, K e V para chaves e valores de mapas, e R para um resultado.
Genéricos em toda parte
A biblioteca padrão do Kotlin é construída sobre genéricos: List<T>, Map<K, V>, Pair<A, B>. Entender genéricos ajuda você a ler e usar esses tipos com confiança.
Verificação rápida
Qual é o principal benefício dos genéricos em comparação com o uso de Any?
Recapitulação
Os genéricos usam parâmetros de tipo como T para escrever funções, classes e interfaces reutilizáveis e com segurança de tipos. O compilador infere os tipos e impõe essa segurança, evitando conversões de tipo. Em seguida, você controlará como os tipos genéricos se relacionam usando variância no local da declaração com in e out.
Aprenda Kotlin com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 51
- Aulas
- 203
Perguntas Frequentes
A aula “Funções e Classes Genéricas” é grátis?
Sim — o texto completo de “Funções e Classes Genéricas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.
O que vou aprender em “Funções e Classes Genéricas”?
Parametrize os tipos Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Kotlin Academy?
Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Funções e Classes Genéricas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Kotlin Academy?
Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Funções e Classes Genéricas
- Variância no Local da Declaração
- Variância no Local de Uso
- Restrições Genéricas