object in Kotlin ist eine deklarative Methode zum Erstellen eines Singleton-Objekts mit Lazy-Initialisierung und standardmäßiger Thread-Sicherheit. Das Schlüsselwort object ersetzt eine ganze Klasse durch eine einzelne Instanz und wird zum Deklarieren von Singletons, companion objects, anonymen Objekten und statischen Hilfsprogrammen verwendet. Laut JetBrains Kotlin Documentation (2026) ist die object declaration der einfachste und sicherste Weg, ein Singleton in der JVM-Welt zu implementieren.
Wichtige Punkte
object in Kotlin ist eine spezielle Deklarationsform, die gleichzeitig eine Klasse definiert und ihre einzige Instanz (Singleton) erstellt. Es ist eine Mischung aus Klassendeklaration und Instanzerstellung in einem Konstrukt.
In Java erfordert die Erstellung eines Singletons einen privaten Konstruktor, ein statisches Feld, eine getInstance-Methode und Thread-Sicherheitsbehandlung. Kotlin object erledigt dies mit einer einzigen Codezeile: object MySingleton { }. Der Compiler generiert automatisch eine thread-sichere Lazy-Initialisierung unter Verwendung des static-initializer-Mechanismus im JVM-Bytecode.
Laut Kotlin Language Specification (2026) wird die object declaration in eine finale Klasse mit einem privaten Konstruktor und einem statischen INSTANCE-Feld kompiliert, das in einem statischen Block initialisiert wird. Dies garantiert die Atomizität der Initialisierung auf JVM-Ebene.
Object declaration (Singleton-Objekt) wird mit dem Schlüsselwort object gefolgt von einem Namen deklariert. Der Objektkörper kann Eigenschaften, Methoden, init-Blöcke enthalten und andere Klassen oder Schnittstellen erben.
object DatabaseManager {
private val connection: String = "jdbc:postgresql://localhost:5432/app"
fun query(sql: String): List<Map<String, Any>> {
// Abfrage ausführen
return emptyList()
}
}
// Verwendung
DatabaseManager.query("SELECT * FROM users")
Die Initialisierung von DatabaseManager erfolgt beim ersten Zugriff — lazy und thread-sicher. Es ist kein zusätzlicher Synchronisationscode erforderlich.
Object kann reguläre Klassen und Schnittstellen erben. Dies erlaubt die Verwendung von object als Implementierung einer abstrakten Klasse oder Schnittstelle mit einer einzigen Instanz.
interface Logger {
fun log(message: String)
}
object ConsoleLogger : Logger {
override fun log(message: String) {
println("[LOG] $message")
}
}
companion object ist ein spezielles object, das innerhalb einer Klasse mit dem Schlüsselwort companion deklariert wird. Es ersetzt statische Mitglieder in Kotlin, da die Sprache kein static-Schlüsselwort hat.
class ApiClient {
companion object {
private const val BASE_URL = "https://api.example.com"
fun create(): ApiClient {
return ApiClient()
}
}
}
// Aufruf ohne Erstellen einer ApiClient-Instanz
val client = ApiClient.create()
Companion object kann einen Namen haben (Standard ist Companion), Schnittstellen implementieren und über extension functions erweitert werden. Im Gegensatz zu statischen Methoden in Java ist ein companion object ein vollwertiges Objekt, das als Argument übergeben oder in einer Variable gespeichert werden kann.
Laut Kotlin Best Practices (2026) wird companion object für Factory-Methoden, Konstanten und statische Hilfsprogramme verwendet, die mit der Klasse verbunden sind. Es wird empfohlen, eine übermäßige Verwendung von companion object zu vermeiden — für nicht verwandte Hilfsprogramme sind Top-Level-Funktionen vorzuziehen.
Für die Java-Kompatibilität können Methoden des companion object mit @JvmStatic annotiert werden. Dies generiert eine echte statische Methode im JVM-Bytecode, die aus Java-Code ohne die Companion-Syntax zugänglich ist.
Object expression ist ein anonymes Objekt, das spontan erstellt wird, um Methoden einer Klasse oder Schnittstelle zu überschreiben, ohne eine separate benannte Klasse zu deklarieren.
val handler = object : Runnable {
override fun run() {
println("Aufgabe ausgeführt")
}
}
thread(handler)
Object expressions unterscheiden sich von object-Deklarationen dadurch, dass sie bei jeder Ausführung eine neue Instanz erstellen. Sie sind keine Singletons und haben keinen Namen. Anonyme Objekte können Variablen aus ihrem Abschluss erfassen, genau wie Lambdas.
Im Gegensatz zu Java, wo anonyme Klassen nur einen Typ erben können, kann die Kotlin object expression mehrere Typen gleichzeitig erben.
interface Clickable {
fun click()
}
abstract class View {
abstract fun render()
}
val button = object : View(), Clickable {
override fun render() = println("Button rendern")
override fun click() = println("Button geklickt")
}
Object ist eines der vielseitigsten Konstrukte in Kotlin und wird in vielen Szenarien verwendet.
In Android-Projekten wird object häufig zum Deklarieren eines Repository verwendet, wo mehrere Instanzen nicht benötigt werden. Eine einzelne Instanz gewährleistet Datenkonsistenz.
object UserRepository {
fun getUser(id: Int): User? {
// Benutzer abrufen
return null
}
}
Companion object mit Factory-Methoden ist eine Alternative zu mehreren Konstruktoren. Benannte Factory-Methoden machen den Code selbstdokumentierend.
data class GsonParser {
companion object {
fun create(): GsonParser = GsonParser()
fun createPretty(): GsonParser = GsonParser()
}
}
Object kann als Container für Konstanten dienen und ersetzt statische final-Felder in Java. Object unterstützt Vererbung, was die Erstellung von Konfigurationshierarchien ermöglicht.
Laut Kotlin Standardbibliothek (2026) ist die object declaration die leistungsfähigste Methode zum Erstellen eines Singletons in Kotlin, die Double-checked-locking-Implementierungen übertrifft und mit dem enum-Singleton in Java vergleichbar ist.
Häufig gestellte Fragen
Object deklariert gleichzeitig eine Klasse und erstellt ihre einzige Instanz. Eine reguläre Klasse kann mehrere Instanzen haben, die über einen Konstruktor erstellt werden.
Lazy — beim ersten Zugriff auf das Objekt. Bis dahin wird kein Speicher zugewiesen und der Code im init-Block wird nicht ausgeführt.
Nein, object kann keinen expliziten Konstruktor haben. Die Initialisierung erfolgt im init-Block, der einmal beim ersten Zugriff auf das Objekt aufgerufen wird.
companion object ist ein object, das innerhalb einer Klasse deklariert wird. Seine Mitglieder sind über den Klassennamen zugänglich, ohne eine Instanz zu erstellen, und ersetzen die statischen Mitglieder von Java.
Ja, die Initialisierung von object ist dank des statischen Initialisierers der JVM vollständig thread-sicher. Es ist keine zusätzliche Synchronisation erforderlich.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch