MWCodebymw.de ↗
Kotlin

companion object in Kotlin – der saubere Weg zu „statischen" Membern

Kotlin kennt kein `static` wie Java. Für Konstanten, Fabrik-Methoden und Co. gibt es das companion object. Ich zeige, wofür ich es nutze – und den Factory-Trick, mit dem der Konstruktor privat bleibt.

Wer von Java kommt, sucht in Kotlin vergeblich nach static. Was du auf Klassen-Ebene brauchst – Konstanten, Fabrik-Methoden, Helfer – lebt in einem companion object: einem einzelnen Objekt, das zur Klasse gehört.

Konstanten und Helfer

class Kreis(val radius: Double) {
    companion object {
        const val PI = 3.14159
        fun einheit() = Kreis(1.0)
    }
}

val u = 2 * Kreis.PI       // über den Klassennamen erreichbar
val eins = Kreis.einheit()

Kreis.PI und Kreis.einheit() rufst du ohne Instanz auf – genau das, was static in Java macht. const val ist eine echte Compile-Zeit-Konstante (nur für primitive Typen und String).

Der Factory-Trick: privater Konstruktor

Oft will ich kontrollieren, wie ein Objekt entsteht (Validierung, Caching). Dann mache ich den Konstruktor privat und biete eine Fabrik-Methode im companion an:

class User private constructor(val name: String) {
    companion object {
        fun ausRohdaten(raw: String): User? {
            val name = raw.trim()
            return if (name.isNotEmpty()) User(name) else null
        }
    }
}

val u = User.ausRohdaten("  Mia  ")   // User oder null
// User("x")  // ❌ geht nicht: Konstruktor ist privat

So gibt es nur einen definierten Weg, ein User zu bauen – inklusive der Regel „leerer Name → null".

Kleiner Aha-Moment

Das companion object ist ein echtes Objekt. Es kann Interfaces implementieren und hat sogar einen Namen (Companion, wenn du keinen vergibst). Für Interop mit Java kannst du Member mit @JvmStatic annotieren, damit sie dort wie klassisch-statische Methoden erscheinen.

Faustregel: Was nicht zu einer einzelnen Instanz gehört, sondern zur Klasse, gehört ins companion object.

Wenn du eine Android-App in Kotlin planst und sauberen, gut strukturierten Code willst, setze ich das für dich um – meld dich über bymw.de.

Quellen

#Kotlin#companion object#Factory#static#const

Du brauchst mehr als ein Snippet?

Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.

Projekt anfragen →