Kotlin Academy · Lekcja

Deklaracja object: singletony w Kotlinie

Twórz singletony za pomocą object i poznaj ich cykl życia.

Lekcja 1 z 413 kroki

Deklaracja object: singletony w Kotlinie to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

object jako singleton

Deklaracja object tworzy pojedynczą instancję — bezpieczny wątkowo singleton inicjalizowany leniwie — za pomocą jednej linii kodu.

Deklarowanie singletona

Użyj object Name { ... }, aby zadeklarować singleton ze stanem i metodami.

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

Stan singletona

Singletony mogą przechowywać mutowalny stan — dostępny z dowolnego miejsca i współdzielony globalnie.

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

Inicjalizacja leniwa

Pojedyncza instancja jest tworzona przy pierwszym dostępie — nigdy wcześniej. JVM gwarantuje, że odbywa się to bezpiecznie wątkowo.

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
}

Implementowanie interfejsów

Singletony mogą implementować interfejsy, co jest przydatne w przypadku callbacków i strategii.

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

Rozszerzanie klasy

Obiekty mogą również dziedziczyć po klasach open.

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

Praktyka: konfiguracja

Singletony doskonale nadają się do konfiguracji obejmującej całą aplikację, która nie zmienia się po uruchomieniu.

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

Praktyka: funkcje narzędziowe

Powiązane bezstanowe funkcje pomocnicze można grupować w object jako metody podobne do statycznych, umieszczone w jednej przestrzeni nazw.

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"))
}

Równość i tożsamość

Istnieje tylko jedna instancja, więc === zawsze zwraca true dla tej samej referencji obiektu.

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

object a class

Zwykła class wymaga utworzenia instancji. object jest instancją — nie wywołuje się konstruktora.

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
}

Bezpieczeństwo wątkowe

Tworzenie instancji singletona jest bezpieczne wątkowo dzięki gwarancjom JVM dotyczącym ładowania klas. Za każdy mutowalny stan dodany wewnątrz odpowiadasz samodzielnie.

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

Szybkie sprawdzenie

Ile instancji istnieje dla deklaracji Kotlin object?

Podsumowanie

object Name { ... } deklaruje bezpieczny wątkowo, leniwie inicjalizowany singleton ze stanem, metodami, interfejsami i dziedziczeniem. Używaj obiektów do konfiguracji, grup funkcji narzędziowych i bezstanowych usług.

Bezpłatny start

Ucz się Kotlin dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
51
Lekcje
203

Często zadawane pytania

Czy lekcja „Deklaracja object: singletony w Kotlinie” jest bezpłatna?

Tak — pełny tekst „Deklaracja object: singletony w Kotlinie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Deklaracja object: singletony w Kotlinie”?

Twórz singletony za pomocą object i poznaj ich cykl życia. Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Deklaracja object: singletony w Kotlinie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?

Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Deklaracja object: singletony w Kotlinie
  2. companion object: elementy podobne do statycznych w Kotlinie
  3. Obiekty anonimowe i wyrażenia object
  4. Metody fabrykujące z companion object
← Powrót do Kotlin Academy