Powrócimy teraz na moment do bezpiecznego rzutowania. Wiecie już jak Kotlin robi to automatycznie, a także jak możecie to zrobić samodzielnie kiedy inteligentne rzutowanie się zawali. A wiecie, że macie trzeci sposób rzutowania? Poznajcie słowo kluczowe "as?", czyli bezpieczne rzutowanie jawne w języku Kotlin.

"AS?" W JĘZYKU KOTLIN TO BEZPIECZNE RZUTOWANIE JAWNE ODPORNE NA WARTOŚCI PUSTE!

Żaden długi wywód nie jest potrzebny. Bezpieczne rzutowanie w sposób jawny robi dokładnie to samo, co "zwykłe" rzutowanie jawne. Tyle tylko, że zapobiega wystąpieniu wyjątku "ClassCastException", w razie jakby co (problem podczas rzutowania). Może takowy wystąpić kiedy domniemany typ stał się wartością "null" w chwili próby rzutowania w sposób jawny, choć generalnie oznacza on rzutowanie na niekompatybilny typ. Na przykład chcielibyśmy rzutować obiekt "Apple" na obiekt "Roof". Jestem przekonany, że chociaż raz się o to potknęliście używając Javy, która nie zapewnia żadnej ochrony w sposób, jaki tu zostanie przedstawiony. Pamiętacie ten przykład?

if(attribute is Int)
{
	val i = attribute as Int
	
	println("${i.inc()}")
}

No. To wyobraźcie sobie, że z niewiadomych przyczyn "attribute" staje się wartością "null" w chwili rzutowania (albo innym typem niepasującym), a już jego typ został zweryfikowany jako w porządku (typ "Int"). Efektem będzie "ClassCastException", czyli zgłoszenie wyjątku. Pomóc może nam w tym słowo "as?" w języku Kotlin, czyli rzutowanie jawne jako bezpieczne:

if(attribute is Int)
{
	val i = attribute as? Int
	
	println("${i?.inc()}")
}

Dodatkowy znak zapytania i sprawa załatwiona. Przypominam Wam o konieczności nałożenia bezpiecznego odwołania w miejsce przedostawania się do każdej metody lub właściwości (znak zapytania przed operatorem kropki)! Co nam to daje w rezultacie końcowym? Przypisanie wartości "null" w sytuacji niepowodzenia poprawnego rzutowania na podany typ i tym samym, przymuszenie do nałożenia zabezpieczeń na każde użytkowanie z powodu typu akceptującego wartość pustą.

W naszym przykładzie, wywołanie funkcji "println" zwróci wartość "null" albo aktualną wartość liczby poddaną inkrementacji. Dzięki zastosowaniu "as?" w języku Kotlin określanego jako "bezpieczne rzutowanie jawne", możemy się już nie przejmować wystąpieniem wyjątku "ClassCastException".

Bezpieczne rzutowanie jawne w języku Kotlin

Słowo kluczowe "as?" w języku Kotlin rzutuje na określony typ w sposób jawny, tylko że w przypadku niepowodzenia, przypisuje wartość "null" aby zapobiec zgłoszeniu wyjątku typu "ClassCastException"!


Taka ciekawostka. Króciutki materiał, bo o samym słowie kluczowym więcej napisać się nie da, poza laniem wody. To kończy mini serię artykułów o wartościach "null" i jak się im przeciwstawiać.

PODOBNE ARTYKUŁY