Nowy temat o Kotlinie już nadszedł! Przejdziemy teraz do następnego rodzaju klasy jaką jest niejaka "klasa zapieczętowana"! Na dokładkę, kolejne słowo kluczowe do poznania które tworzy takie klasy, a jest nim "sealed class" w języku Kotlin!

"SEALED CLASS" W JĘZYKU KOTLIN JESZCZE JEDNĄ ODMIANĄ KLASY!

Macie prawo być zaskoczonym. Kotlin oferuje jeszcze jeden wariant klasy jaką jest "klasa zapieczętowana".

ZAPIECZĘTOWANA KONTRA WYLICZENIOWA

Klasa zapieczętowana ma związek z opisanymi wcześniej klasami wyliczeniowymi i służy ograniczaniu hierarchii klas do specyficznych typów pochodnych, a każdy z nich może dysponować własną niestandardową "paletą" danych składowych i metod. Klasa wyliczeniowa ma to ograniczenie, że narzuca raz określony zestaw właściwości i metod, którego każda stała (czyli instancja) musi się trzymać. Klasa zapieczętowana nie wymusza takiego manewru. Drugą istotną różnicą jest fakt, iż tworzy się instancje klas w sposób tradycyjny, a nie w środku klasy. A po trzecie, używając klasy zapieczętowanej można utworzyć wiele takich samych instancji, a klasa wyliczeniowa dysponuje tylko po jednej sztuce na każdą.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Przyjrzyjmy się składni, która jest banalnie prosta do ogarnięcia. Słowo kluczowe "sealed class" w języku Kotlin i już! Klasa zapieczętowana gotowa:

sealed class Collectible

Dodajmy sobie też od razu parę klas potomnych dziedziczących od zapieczętowanej:

class Coin(val points : Int) : Collectible()
class Bomb(val damage : Int, val range : Int) : Collectible()

Tak to się definiuje w przypadku takich klas. Jaka korzyść? Od teraz, możemy swobodniej dysponować zestawami właściwości i metod w każdej klasie potomnej dziedziczącej od klasy "sealed class" w języku Kotlin.

Ktoś może spytać, "a jak wyglądałaby weryfikacja?". A pamiętacie moje słowa o inteligentnym rzutowaniu? Korzystając właśnie z tego, możemy zadbać o bezproblemową identyfikację typu obiektu, wykorzystując przy tym polimorfizm (możliwość podstawienia obiektu klasy pochodnej do zmiennej typu "klasa bazowa"). Sprawdźmy to:

val bomb = Bomb(130, 15)

when (val collectible : Collectible = bomb)
{
	is Coin -> println("Podniesiono monetę.")
	is Bomb -> println("Podniesiono bombę.")
}

Tyle! Najlepiej skorzystać z instrukcji "when". Może trochę więcej roboty, jednakże nie ma co narzekać skoro "sealed class" w języku Kotlin daje nam takie możliwości, których nie znajdziemy w klasie wyliczeniowej.

Klasa zapieczętowana w języku Kotlin

Klasa zapieczętowana znosi przymus stosowania się do raz podanego układu właściwości i metod jaki widać w klasie wyliczeniowej, zachowując jednocześnie informacje o przynależności danych klas do odpowiedniego rodzaju czy zastosowania.


Podsumowuję. Klasa zapieczętowana ma takie same zastosowanie co klasa wyliczeniowa, natomiast sięga nieco dalej od "enum’a". Pozwala na określanie niestandardowych zbiorów właściwości i metod przy jednoczesnej przynależności do danej klasy i oprócz tego, oferuje tworzenie WIELU instancji w sposób tradycyjny. Moja rada jest prosta: śmiało korzystaj z "sealed class" w języku Kotlin, jeżeli klasa wyliczeniowa nie wystarcza...

PODOBNE ARTYKUŁY