object v Kotlinu — je deklarativní způsob vytvoření singleton objektu s línou inicializací a vláknovou bezpečností ve výchozím nastavení. Klíčové slovo object nahrazuje celou třídu s jedinou instancí a používá se k deklaraci singleton, companion object, anonymních objektů a statických utilit. Podle JetBrains Kotlin Documentation (2026) je object declaration nejjednodušší a nejbezpečnější způsob implementace singletonu ve světě JVM.
Hlavní body
object v Kotlinu — je speciální forma deklarace, která současně definuje třídu a vytváří její jedinou instanci (singleton). Je to hybrid class declaration a instance creation v jedné konstrukci.
V Javě je pro vytvoření singletonu třeba napsat soukromý konstruktor, statické pole, metodu getInstance a zpracovat vláknovou bezpečnost. Kotlin object to dělá jedním řádkem kódu: object MySingleton { }. Kompilátor automaticky generuje vláknově bezpečnou línou inicializaci pomocí mechanismu static initializer v JVM bytekódu.
Podle Kotlin Language Specification (2026) se object declaration zkompiluje do finální třídy se soukromým konstruktorem a statickým polem INSTANCE, inicializovaným ve statickém bloku. To zaručuje atomicitu inicializace na úrovni JVM.
Object declaration (singleton objekt) se deklaruje pomocí klíčového slova object, za kterým následuje název. Tělo objektu může obsahovat vlastnosti, metody, init bloky a dědit z jiných tříd nebo rozhraní.
object DatabaseManager {
private val connection: String = "jdbc:postgresql://localhost:5432/app"
fun query(sql: String): List<Map<String, Any>> {
// provedení dotazu
return emptyList()
}
}
// Použití
DatabaseManager.query("SELECT * FROM users")
Inicializace DatabaseManageru nastává v okamžiku prvního přístupu — líně a vláknově bezpečně. Není vyžadován žádný další kód pro synchronizaci.
Object může dědit z běžných tříd a rozhraní. To umožňuje použít object jako implementaci abstraktní třídy nebo rozhraní s jedinou instancí.
interface Logger {
fun log(message: String)
}
object ConsoleLogger : Logger {
override fun log(message: String) {
println("[LOG] $message")
}
}
companion object — je speciální object deklarovaný uvnitř třídy s klíčovým slovem companion. Nahrazuje statické členy v Kotlinu, protože v jazyce není klíčové slovo static.
class ApiClient {
companion object {
private const val BASE_URL = "https://api.example.com"
fun create(): ApiClient {
return ApiClient()
}
}
}
// Volání bez vytvoření instance ApiClient
val client = ApiClient.create()
Companion object může mít jméno (výchozí Companion), implementovat rozhraní a být rozšiřitelný pomocí extension functions. Na rozdíl od statických metod v Javě je companion object plnohodnotný objekt, který lze předat jako argument nebo uložit do proměnné.
Podle Kotlin Best Practices (2026) se companion object používá pro tovární metody, konstanty a statické utility spojené s třídou. Doporučuje se vyhnout nadměrnému používání companion object — pro nesouvisející utility je lepší používat funkce nejvyšší úrovně.
Pro kompatibilitu s Javou lze metody companion object anotovat @JvmStatic. To generuje skutečnou statickou metodu v JVM bytekódu, přístupnou z Java kódu bez syntaxe Companion.
Object expression — je anonymní objekt vytvořený na místě pro přepsání metod třídy nebo rozhraní bez deklarace samostatné pojmenované třídy.
val handler = object : Runnable {
override fun run() {
println("Úloha provedena")
}
}
thread(handler)
Object expressions se liší od deklarací object tím, že při každém provedení vytvářejí novou instanci. Nejsou to singly a nemají jméno. Anonymní objekty mohou zachytávat proměnné z uzávěru, stejně jako lambdy.
Na rozdíl od Javy, kde anonymní třídy mohou dědit pouze jeden typ, Kotlin object expression může dědit několik typů současně.
interface Clickable {
fun click()
}
abstract class View {
abstract fun render()
}
val button = object : View(), Clickable {
override fun render() = println("Vykreslení tlačítka")
override fun click() = println("Tlačítko kliknuto")
}
Object — jedna z nejvšestrannějších konstrukcí Kotlinu, používaná v mnoha scénářích.
V Android projektech se object často používá k deklaraci Repository, kde není potřeba více instancí. Jediná instance zaručuje konzistenci dat.
object UserRepository {
fun getUser(id: Int): User? {
// získání uživatele
return null
}
}
Companion object s továrními metodami — alternativa k více konstruktorům. Pojmenované tovární metody činí kód samodokumentujícím.
data class GsonParser {
companion object {
fun create(): GsonParser = GsonParser()
fun createPretty(): GsonParser = GsonParser()
}
}
Object může sloužit jako kontejner pro konstanty, nahrazující statická final pole v Javě. Object podporuje dědičnost, což umožňuje vytváření hierarchií konfigurací.
Podle Kotlin Standard Library (2026) je object declaration nejvýkonnější způsob vytvoření singletonu v Kotlinu, překonávající v rychlosti implementace „double-checked locking" a srovnatelný s enum singleton v Javě.
Často kladené otázky
Object současně deklaruje třídu a vytváří její jedinou instanci. Běžná třída může mít mnoho instancí vytvořených pomocí konstruktoru.
Líně — při prvním přístupu k objektu. Do té doby není paměť alokována a kód v init bloku se nespouští.
Ne, object nemůže mít explicitní konstruktor. Inicializace probíhá v init bloku, který je volán jednou při prvním přístupu k objektu.
companion object — je object deklarovaný uvnitř třídy. Jeho členy jsou přístupné přes název třídy bez vytvoření instance, což nahrazuje statické členy Javy.
Ano, inicializace object je plně thread-safe díky statickému inicializátoru JVM. Není vyžadována žádná další synchronizace.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také