Jason. Cała informatyka w jednym miejscu!

Przedstawiam Wam drugą część związaną z obiektami klasowymi w Kotlinie i zademonstruję Wam teraz czym się różni obiekt klasowy od obiektu klasowego uzupełniającego. Dodatkowe słowo kluczowe za to odpowiada - to jest "companion object" w języku Kotlin!

"COMPANION OBJECT" W JĘZYKU KOTLIN "TOWARZYSZY" UZUPEŁNIAJĄCYM OBIEKTOM KLASOWYM!

Jak mogliście zauważyć, to jest ewidentnie druga część tematu dotyczącego obiektów klasowych. Obiekt klasowy uzupełniający tym się różni od zwykłego, że może on występować tylko i wyłącznie w środku innej klasy. Na tym się różnice nie kończą, to jest dopiero najważniejsza. Ale żeby o nich opowiedzieć, musimy najpierw popatrzeć na fragment kodu źródłowego, który obrazuje wykorzystanie "companion object".

PRZYKŁAD KODU ŹRÓDŁOWEGO

Uzupełniający obiekt klasowy wygląda w taki sposób (przykład pobrany z poprzedniej części o obiektach klasowych):

class Object {
	companion object StaticMethods {
		fun displayAllExistingObjects() {

		}
	}
}

Rozpoznacie go natychmiastowo po słowie kluczowym "companion object" w języku Kotlin. Korzystanie z takiego obiektu klasowego wygląda bardzo podobnie jak przy korzystaniu z właściwości i metod o publicznym dostępie. Po prostu korzystacie z operatora kropki i podajecie właściwość lub metodę, tylko możecie pominąć podawanie nazwy obiektu klasowego, choć nie zostanie to uznane za błąd (kompilator posądzi Was jedynie o nadmiarowość kodu):

// obie formy poprawne
Object.displayAllExistingObjects()
Object.StaticMethods.displayAllExistingObjects()

POWOŁUJ SIĘ NA TO STATYCZNIE!

Główną cechą uzupełniającego obiektu klasowego jest "stawanie się" częścią tej klasy. Ponieważ jednak nie jest to dana składowa, zachowuje statyczność gdyż nie wymaga tworzenia instancji klasy celem przedostania się do jej zawartości, tak jak "zwykły" obiekt klasowy. Przypomnę może o co mi chodzi:

Object.displayAllExistingObjects()

Żadnych obiektów, żadnych przypisywań (choć można przypisać obiekt uzupełniający do zmiennej, o czym jest niżej). Czyste przedostawanie się do klasy i użycie metody (albo właściwości). Tak jak jest z klasą "Math" w języku Java.

OBIEKT BEZ NAZWY

Na wierzch wysuwa się kolejna różnica od zwykłego obiektu klasowego. Obiekt "companion object" w języku Kotlin nie musi mieć nazwy! Możecie ją całkowicie pominąć:

class Object {
	companion object {
		fun displayAllExistingObjects() {

		}
	}
}

Tylko wtedy podczas wywołania, może przydać się Wam słowo "Companion", ale w tym przypadku pisane wielką literą! Będzie ono występować WYŁĄCZNIE po usunięciu nazwy (próba skorzystania z niego zakończy się błędem kompilacji, jeśli nadal posiada jakąkolwiek nazwę)! Kompilator musi jakoś wiedzieć jak to ma zidentyfikować, skoro pozbawiacie obiektu klasowego własnej etykiety:

val oc = Object.Companion

Może się to przydać podczas podstawiania "companion object" w języku Kotlin do zmiennych, bo to także nie jest zakazane.

Uzupełniający obiekt klasowy w języku Kotlin

Uzupełniający obiekt klasowy to rodzaj obiektu, który może występować jedynie w środku innej klasy! Jeżeli nie posiada nazwy, wtedy powołanie się na niego jest możliwe poprzez klucz "Companion".


Czy można coś więcej napisać? Nie sądzę, także pobawcie się tym i opanujcie, a "companion object" w języku Kotlin może Wam w przyszłości naprawdę "towarzyszyć"!

PODOBNE ARTYKUŁY