Kotlin Academy · Les

Factorymethoden met companion object

Implementeer factorypatronen met companion object en de invoke-operator.

Les 4 van 413 stappen

Factorymethoden met companion object is een gratis Kotlin Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Kotlin Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Kotlin Academy bevat in totaal 4 lessen.

Het fabrieksmethodepatroon

Fabrieksmethoden maken objecten met betekenisvolle namen en logica, terwijl ze de complexiteit van constructors verbergen. Het companion object van Kotlin is de ideale plek hiervoor.

Privéconstructor + fabrieksmethode

Maak de constructor privé en bied fabrieksmethoden aan via het companion object.
class Token private constructor(val value: String) {
    companion object {
        fun generate() = Token(java.util.UUID.randomUUID().toString())
        fun fromString(s: String) = Token(s.trim())
    }
}
val t = Token.generate()

Benoemde fabrieksmethoden

Beschrijvende namen maken de bedoeling duidelijk — in tegenstelling tot overbelaste constructors.
class Duration private constructor(val ms: Long) {
    companion object {
        fun ofMillis(ms: Long) = Duration(ms)
        fun ofSeconds(s: Long) = Duration(s * 1000)
        fun ofMinutes(m: Long) = Duration(m * 60_000)
    }
}
val d = Duration.ofMinutes(5)

Null teruggeven vanuit een fabrieksmethode

Fabrieksmethoden kunnen bij ongeldige invoer null teruggeven in plaats van een uitzondering te gooien.
class Percentage private constructor(val value: Int) {
    companion object {
        fun of(value: Int): Percentage? {
            return if (value in 0..100) Percentage(value) else null
        }
    }
}
val p = Percentage.of(75) ?: error("Invalid")

Gecachte instanties

Fabrieksmethoden kunnen instanties cachen en hergebruiken.
class Direction private constructor(val name: String) {
    companion object {
        private val cache = mutableMapOf<String, Direction>()
        fun of(name: String) = cache.getOrPut(name.uppercase()) {
            Direction(name.uppercase())
        }
    }
}

De invoke-operator als constructorachtige fabrieksmethode

Definieer invoke() om de klasse als een functie aan te roepen.
class Email private constructor(val address: String) {
    companion object {
        operator fun invoke(raw: String): Email {
            require("@" in raw) { "Invalid email" }
            return Email(raw.lowercase())
        }
    }
}
val e = Email("Test@Example.com")  // looks like a constructor

Abstracte fabriek met verzegelde klassen

Combineer fabrieksmethoden met hiërarchieën van verzegelde klassen voor typeveilige aanmaak.
sealed class Shape {
    data class Circle(val r: Double) : Shape()
    data class Rect(val w: Double, val h: Double) : Shape()
    companion object {
        fun circle(r: Double) = Circle(r)
        fun rect(w: Double, h: Double) = Rect(w, h)
    }
}

Fabrieksmethode met afhankelijkheden

Fabrieksmethoden kunnen afhankelijkheden accepteren en deze aan elkaar koppelen.
class Repository(private val db: Database) {
    companion object {
        fun create(db: Database = Database.instance) = Repository(db)
    }
    fun findAll() = db.query("SELECT * FROM items")
}

Fabrieksmethode in tests

Fabrieksmethoden maken het maken van testobjecten overzichtelijk en expliciet.
class Order private constructor(
    val id: Long, val items: List<String>, val paid: Boolean
) {
    companion object {
        fun unpaid(id: Long, items: List<String>) = Order(id, items, false)
        fun paid(id: Long, items: List<String>) = Order(id, items, true)
    }
}

Van JSON/configuratie

Fabrieksmethoden zijn logische startpunten voor het parseren.
class AppConfig private constructor(
    val baseUrl: String, val timeout: Int
) {
    companion object {
        fun fromEnv() = AppConfig(
            baseUrl = System.getenv("BASE_URL") ?: "http://localhost",
            timeout = System.getenv("TIMEOUT")?.toInt() ?: 30
        )
    }
}

Wanneer je GEEN privéconstructor gebruikt

Maak constructors niet alleen om stilistische redenen privé. Gebruik dit wanneer validatie vereist is, cachen nodig is of meerdere aanmaakroutes een verschillende betekenis hebben.

Korte controle

Welke operatorfunctie maakt het mogelijk om een companion object als een constructor aan te roepen: Email("a@b.com")?

Samenvatting

Fabrieksmethoden in companion objects: een privéconstructor met benoemde fabrieksmethoden, optioneel null teruggeven, cachen en invoke() voor constructorachtige syntaxis. Fabrieksmethoden maken het maken van objecten veilig, duidelijk en testbaar!
Gratis beginnen

Leer Kotlin met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
51
Lessen
203

Veelgestelde vragen

Is de les “Factorymethoden met companion object” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Kotlin Academy, waaronder “Factorymethoden met companion object”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Kotlin Academy bevat in totaal 4 lessen.

Wat leer ik in “Factorymethoden met companion object”?

Implementeer factorypatronen met companion object en de invoke-operator. Je oefent met Kotlin Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Kotlin Academy te beginnen?

Ervaring vooraf is niet nodig. Kotlin Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Factorymethoden met companion object”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Kotlin Academy?

Ja. Elke les over Kotlin Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. object-declaratie: Kotlin-singletons
  2. companion object: static-achtige leden in Kotlin
  3. Anonieme objecten en objectexpressies
  4. Factorymethoden met companion object
← Terug naar Kotlin Academy