O que é object em Kotlin?
A palavra-chave object em Kotlin serve para criar singletons — objetos que existem em uma única instância durante toda a execução do programa. Além disso, object também é usado para criar objetos anônimos, parecidos com as classes anônimas do Java.
Em Kotlin, o padrão Singleton vem de fábrica. Não precisa de construtor privado, campo estático nem nada disso.
Object Declaration (Singleton)
object GerenciadorDeLog {
private val logs = mutableListOf<String>()
fun registrar(mensagem: String) {
logs.add(mensagem)
println("LOG: $mensagem")
}
fun exibirTodos() {
logs.forEach { println(it) }
}
}
fun main() {
GerenciadorDeLog.registrar("Aplicação iniciada")
GerenciadorDeLog.registrar("Usuário fez login")
GerenciadorDeLog.exibirTodos()
}
Você acessa diretamente pelo nome, sem precisar instanciar. O Kotlin garante que só vai existir uma instância de GerenciadorDeLog no programa inteiro.
Object Expression (Objeto anônimo)
Quando você precisa de um objeto que implementa uma interface ou estende uma classe, mas não quer criar uma classe nomeada, usa object expression:
interface Clicavel {
fun aoClicar()
}
fun configurarBotao(acao: Clicavel) {
acao.aoClicar()
}
fun main() {
configurarBotao(object : Clicavel {
override fun aoClicar() {
println("Botão clicado!")
}
})
}
Isso é muito útil em callbacks e listeners, principalmente no desenvolvimento Android.
Diferença entre object e class
A principal diferença é que object não tem construtor. Ele é inicializado na primeira vez que é acessado (lazy initialization) e permanece vivo enquanto a aplicação rodar.
| Característica | class | object |
|---|---|---|
| Instâncias | Várias | Uma só |
| Construtor | Sim | Não |
| Herança | Pode herdar e ser herdada | Pode herdar, não pode ser herdada |
Use object quando precisar de uma instância única e global, como gerenciadores, configurações ou utilitários.