object em Kotlin é uma forma declarativa de criar um objeto singleton com inicialização lazy e segurança de thread por padrão. A palavra-chave object substitui uma classe inteira por uma única instância e é usada para declarar singletons, companion objects, objetos anônimos e utilitários estáticos. De acordo com a documentação JetBrains Kotlin (2026), object declaration é a maneira mais simples e segura de implementar um singleton no mundo JVM.
Principais pontos
object em Kotlin é uma forma especial de declaração que simultaneamente define uma classe e cria sua única instância (singleton). É um híbrido de declaração de classe e criação de instância em uma única construção.
Em Java, criar um singleton requer um construtor privado, um campo estático, um método getInstance e tratamento de segurança de threads. Kotlin object faz isso em uma única linha de código: object MySingleton { }. O compilador gera automaticamente uma inicialização lazy thread-safe usando o mecanismo static initializer no bytecode JVM.
De acordo com a Especificação da Linguagem Kotlin (2026), object declaration é compilado em uma classe final com um construtor privado e um campo estático INSTANCE inicializado em um bloco estático. Isso garante atomicidade de inicialização no nível da JVM.
Object declaration (objeto singleton) é declarado usando a palavra-chave object seguida por um nome. O corpo do objeto pode conter propriedades, métodos, blocos init e herdar outras classes ou interfaces.
object DatabaseManager {
private val connection: String = "jdbc:postgresql://localhost:5432/app"
fun query(sql: String): List<Map<String, Any>> {
// executando a consulta
return emptyList()
}
}
// Uso
DatabaseManager.query("SELECT * FROM users")
A inicialização do DatabaseManager ocorre no primeiro acesso — de forma lazy e thread-safe. Nenhum código de sincronização adicional é necessário.
Object pode herdar classes e interfaces regulares. Isso permite usar object como implementação de uma classe abstrata ou interface com uma única instância.
interface Logger {
fun log(message: String)
}
object ConsoleLogger : Logger {
override fun log(message: String) {
println("[LOG] $message")
}
}
companion object é um objeto especial declarado dentro de uma classe com a palavra-chave companion. Ele substitui membros estáticos em Kotlin, já que a linguagem não possui a palavra-chave static.
class ApiClient {
companion object {
private const val BASE_URL = "https://api.example.com"
fun create(): ApiClient {
return ApiClient()
}
}
}
// Chamando sem criar uma instância de ApiClient
val client = ApiClient.create()
Companion object pode ter um nome (padrão é Companion), implementar interfaces e ser estendido via extension functions. Diferente de métodos estáticos em Java, um companion object é um objeto completo que pode ser passado como argumento ou armazenado em uma variável.
De acordo com as Melhores Práticas Kotlin (2026), companion object é usado para métodos fábrica, constantes e utilitários estáticos relacionados à classe. Recomenda-se evitar o uso excessivo de companion object — para utilitários não relacionados, funções de nível superior são preferíveis.
Para compatibilidade com Java, métodos do companion object podem ser anotados com @JvmStatic. Isso gera um método estático real no bytecode JVM, acessível de código Java sem a sintaxe Companion.
Object expression é um objeto anônimo criado no momento para sobrescrever métodos de uma classe ou interface sem declarar uma classe nomeada separada.
val handler = object : Runnable {
override fun run() {
println("Tarefa executada")
}
}
thread(handler)
Object expressions diferem das declarações object porque criam uma nova instância a cada execução. Eles não são singletons e não têm nome. Objetos anônimos podem capturar variáveis de seu fechamento, assim como lambdas.
Ao contrário de Java, onde classes anônimas podem herdar apenas um tipo, a object expression do Kotlin pode herdar múltiplos tipos ao mesmo tempo.
interface Clickable {
fun click()
}
abstract class View {
abstract fun render()
}
val button = object : View(), Clickable {
override fun render() = println("Renderizando botão")
override fun click() = println("Botão clicado")
}
Object é uma das construções mais versáteis do Kotlin, usada em muitos cenários.
Em projetos Android, object é frequentemente usado para declarar um Repository onde múltiplas instâncias não são necessárias. Uma única instância garante consistência dos dados.
object UserRepository {
fun getUser(id: Int): User? {
// obtendo o usuário
return null
}
}
Companion object com métodos fábrica é uma alternativa a múltiplos construtores. Métodos fábrica nomeados tornam o código autodocumentado.
data class GsonParser {
companion object {
fun create(): GsonParser = GsonParser()
fun createPretty(): GsonParser = GsonParser()
}
}
Object pode servir como contêiner de constantes, substituindo campos static final em Java. Object suporta herança, o que permite criar hierarquias de configuração.
De acordo com a Biblioteca Padrão Kotlin (2026), object declaration é a maneira mais eficiente de criar um singleton em Kotlin, superando implementações double-checked locking e comparável ao singleton enum em Java.
Perguntas frequentes
Object simultaneamente declara uma classe e cria sua única instância. Uma classe normal pode ter múltiplas instâncias criadas via construtor.
Lazy — no primeiro acesso ao objeto. Até lá, nenhuma memória é alocada e o código no bloco init não é executado.
Não, object não pode ter um construtor explícito. A inicialização é realizada no bloco init, que é chamado uma vez no primeiro acesso ao objeto.
companion object é um object declarado dentro de uma classe. Seus membros são acessíveis através do nome da classe sem criar uma instância, substituindo membros estáticos de Java.
Sim, a inicialização de object é completamente thread-safe graças ao inicializador estático da JVM. Nenhuma sincronização adicional é necessária.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também