Kotlin Academy · Lektion

object-deklaration: Kotlins singleton-objekt

Skapa singleton-objekt med object och förstå deras livscykel.

Lektion 1 av 413 steg

object-deklaration: Kotlins singleton-objekt är en gratis lektion i Kotlin Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Kotlin Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kotlin Academy innehåller totalt 4 lektioner.

object som singleton

En object-deklaration skapar en enda instans – en trådsäker singleton som initieras lazy – med en enda kodrad.

Deklarera en singleton

Använd object Name { ... } för att deklarera en singleton med tillstånd och metoder.

object Logger {
    fun log(msg: String) = println("[LOG] $msg")
}
fun main() {
    Logger.log("App started")
    Logger.log("User signed in")
}

Singleton-tillstånd

Singletoner kan innehålla muterbart tillstånd som är åtkomligt överallt och delas globalt.

object Counter {
    var count = 0
    fun increment() { count++ }
}
fun main() {
    Counter.increment()
    Counter.increment()
    Counter.increment()
    println(Counter.count) // 3
}

Lazy-initiering

Den enda instansen skapas första gången den används – aldrig tidigare. JVM garanterar att detta är trådsäkert.

object Heavy {
    init { println("Initializing Heavy...") }
    fun work() = "done"
}
fun main() {
    println("Before access")
    println(Heavy.work()) // triggers init now
    println(Heavy.work()) // no init again
}

Implementera gränssnitt

Singletoner kan implementera gränssnitt, vilket är användbart för callbacks och strategier.

interface Greeter { fun greet(name: String): String }
object EnglishGreeter : Greeter {
    override fun greet(name: String) = "Hello, $name!"
}
fun main() {
    println(EnglishGreeter.greet("Ada"))
}

Ärva från en klass

Objects kan även ärva från klasser som är open.

open class Animal(val sound: String) {
    fun makeSound() = "The animal says $sound"
}
object Cat : Animal("Meow")
fun main() {
    println(Cat.makeSound())
}

Praktiskt: konfiguration

Singletoner passar utmärkt för konfiguration som gäller hela appen och inte ändras efter uppstart.

object AppConfig {
    val apiUrl = "https://api.example.com"
    val timeout = 5000
    val version = "1.0.0"
}
fun main() {
    println("v${AppConfig.version} -> ${AppConfig.apiUrl}")
}

Praktiskt: hjälpfunktioner

Samla relaterade tillståndslösa hjälpfunktioner i ett object som namnrymdsbaserade, statikliknande metoder.

object StringUtils {
    fun reverse(s: String) = s.reversed()
    fun capitalize(s: String) = s.replaceFirstChar { it.uppercase() }
}
fun main() {
    println(StringUtils.reverse("Kotlin"))
    println(StringUtils.capitalize("hello"))
}

Likhet och identitet

Det finns bara en instans, så === returnerar alltid true för samma objektreferens.

object MySingleton
fun main() {
    val a = MySingleton
    val b = MySingleton
    println(a === b) // true
}

object kontra class

En vanlig class måste instansieras. Ett object är själva instansen – ingen konstruktoranrop behövs.

class Service { fun ping() = "pong (class)" }
object SingletonService { fun ping() = "pong (object)" }
fun main() {
    val s = Service() // instance per call
    println(s.ping())
    println(SingletonService.ping()) // no instantiation
}

Trådsäkerhet

Skapandet av singleton-instansen är trådsäkert tack vare JVM:s garantier för klassinläsning. Allt muterbart tillstånd som du lägger till inuti är ditt ansvar.

object SharedCounter {
    @Volatile var count = 0
    @Synchronized fun inc() { count++ }
}
fun main() {
    repeat(1000) { SharedCounter.inc() }
    println(SharedCounter.count) // 1000
}

Snabb kontroll

Hur många instanser finns det av en Kotlin-object-deklaration?

Sammanfattning

object Name { ... } deklarerar en trådsäker, lazy singleton med tillstånd, metoder, gränssnitt och arv. Använd objects för konfiguration, grupper av hjälpfunktioner och tillståndslösa tjänster.

Gratis att börja

Lär dig Kotlin med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”object-deklaration: Kotlins singleton-objekt” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Kotlin Academy, inklusive ”object-deklaration: Kotlins singleton-objekt”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Kotlin Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”object-deklaration: Kotlins singleton-objekt”?

Skapa singleton-objekt med object och förstå deras livscykel. Ni övar på Kotlin Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Kotlin Academy?

Du behöver inga förkunskaper. Utbildningen i Kotlin Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”object-deklaration: Kotlins singleton-objekt”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Kotlin Academy-lektionen?

Ja. Varje Kotlin Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. object-deklaration: Kotlins singleton-objekt
  2. companion object: static-liknande medlemmar i Kotlin
  3. Anonyma objekt och objektuttryck
  4. Factory-metoder med companion object
← Tillbaka till Kotlin Academy