W dzisiejszym materiale przybliżę Ci szczegóły jak wykonać rzutowanie typu w języku Java i co to za wynalazek 😉. Nie jest to może coś hiper, co trzeba koniecznie znać, żeby swobodnie poruszać się po kodzie, aczkolwiek mogą pojawić się sytuacje, w których to Ci się przyda. Nie czekaj, tylko właź do środka, a wszystko Ci wytłumaczę za friko 😄!
Tweet |
DLACZEGO MIAŁOBY MNIE OBCHODZIĆ RZUTOWANIE TYPU W JĘZYKU JAVA?!
Operacja rzutowania typu danych oznacza prostymi słowy wymuszenie zmiany typu wskazanej zmiennej, jakby nie była tego typu jaki faktycznie reprezentuje. Chodzi o możliwość skonwertowania typu danych zmiennej na inny. Na przykład jesteśmy w stanie przekonwertować liczbę całkowitą na liczbę zmiennoprzecinkową przy czym należy zachować ostrożność, bo kompilator nam przerwie program, gdy próba konwersji okaże się absurdalna (tak naprawdę zgłosi wyjątek o niekompatybilności typów). Zaraz Wam wyjaśnię co mam na myśli, tylko skupmy się wpierw na tym, jak przeprowadzić takie rzutowanie w kodzie źródłowym.
RZUTOWANIE OD...KODU
Rzutowanie wykonujemy bardzo prosto. Po zdefiniowaniu sobie zmiennej np. typu "float":
float f = 9.5f;
możemy sobie rzutować na typ "int", na liczbę całkowitą w taki oto sposób:
int i = (int)f;
Ten fragment kodu:
(int)
to rzutowanie typu w języku Java. Wewnątrz obowiązkowych nawiasów okrągłych, wpisujemy typ danych jaki nas interesuje. W ten sposób uda Ci się zaokrąglić liczbę z ułamkiem, natomiast uważaj! Rzutowanie z liczby zmiennoprzecinkowej na całkowitą nie powoduje zaokrąglenia, tylko "obcięcia" części ułamkowej, czyli zawsze zaokrągli w dół! Dlatego zmienna "i" przyjmie wartość nie 10, a 9. Jeśli Ciebie interesuje takie "prawdziwe" zaokrąglanie, to należy użyć do tego metod matematycznych np. "Math.round". Odniosę się do tego w innym artykule, bo to nie jest miejsce na przedstawienie metod matematycznych.
CZY TO JEST W OGÓLE POTRZEBNE?
Tak, jest potrzebne bo język Java podchodzi rygorystycznie do zgodności typów danych. Więcej informacji znajdziesz pod hasłem "silna typizacja" bądź "silne typowanie".
KIEDY (NIE) MOŻEMY Z TEGO SKORZYSTAĆ?
Możemy, jeśli robimy to z głową. Nie powinniśmy, jeśli wyjdą same bzdury. Ciężko sobie wyobrazić jak by wyglądała wartość łańcucha znaków, gdyby został przekonwertowany na liczbę całkowitą 🤦♂️. Więc kiedy rzutowanie typu w języku Java jest zasadne 🤔?
Jeden z przypadków macie u góry - konwersja liczby zmiennoprzecinkowej na całkowitą jest jak najbardziej w porządku. Wiemy czego się spodziewać - tej samej liczby, tylko bez ułamka 🙂. Drugi przykład poprawnego użycia to polimorficzne przypisanie obiektu klasy potomnej do zmiennej typu klasy bazowej:
Wolf wolf = new Wolf();
Animal animal = (Animal)wolf;
Pójdzie bez problemu, o ile "Animal" jest klasą bazową klasy "Wolf". Temat dziedziczenia jeszcze nie został poruszony, także nie przejmuj się tym zapisem. Chciałem tylko pokazać gdzie jeszcze rzutowanie w języku Java może okazać się przydatne 👍.
RZUTOWANIE NIEJAWNE
Do tej pory mówiliśmy sobie o jawnym rzutowaniu typu, natomiast możecie mieć do czynienia z sytuacjami "tajnego" rzutowania przez kompilator 😨. Kiedy coś takiego może wystąpić?
Przypadkiem charakterystycznym (jeśli nie jedynym) jest polimorfizm w kontekście przekazywania parametru do wywoływanej funkcji, czyli skorzystanie z obiektu klasy potomnej:
Wolf wolf = new Wolf();
i "włożenie" go do wywołania funkcji:
doSomething(wolf);
a ona oczekuje parametru typu klasy bazowej:
public void doSomething(Animal animal) {
// instrukcje
}
Wtedy nie trzeba rzutować samemu, kompilator zrobi to za Ciebie!
Rzutowanie typu w języku Java "wymusza" na kompilatorze traktowania zmiennej jako innego typu danych.
"The end" 😛. Wiemy już czym jest rzutowanie oraz kiedy możemy z niego skorzystać i do jakich celów.
NASTĘPNY ARTYKUŁ: Instrukcja warunkowa w języku Java i operator warunkowy