– A teraz czas na małą lekcję od Diego. Będzie krótko i na temat. O konwersjach typów referencyjnych
– Zacznijmy od zmiennych Object. Do takiej zmiennej możemy przypisać każdy typ referencyjny (konwersja rozszerzająca). Jednak, aby wykonać operację przypisania w odwrotnym kierunku (konwersja zawężająca), musisz wyraźnie wskazać operację rzutowania:
Kod | Opis |
---|---|
|
Typowa referencyjna konwersja rozszerzająca |
|
Typowa referencyjna konwersja zawężająca |
|
Konwersja rozszerzająca. |
|
Błąd Runtime! Nie można przekazać referencji Integer do referencji String. |
|
Błąd Runtime! Nie można przekazać referencji Integer do referencji Float. |
|
Konwersja na ten sam typ. Referencyjna konwersja zawężająca. |
– Referencyjne konwersje zawężające i rozszerzające nie zmieniają w żaden sposób obiektu. Część zawężająca (lub rozszerzająca) odnosi się konkretnie do faktu, że operacja przypisania obejmuje (lub nie obejmuje) sprawdzenie typu zmiennej oraz jej nowej wartości.
– To rzadki przypadek, kiedy wszystko jest jasne.
– Aby uniknąć błędów w tych przykładach, należy dowiedzieć się, do jakiego typu odnosi się zmienna Object:
int i = 5;
float f = 444.23f;
String s = "17";
Object o = f; // o przechowuje Float
if (o instanceof Integer)
{
Integer i2 = (Integer) o;
}
else if (o instanceof Float)
{
Float f2 = (Float) o; // Zostanie wykonany blok if
}
else if (o instanceof String)
{
String s2 = (String) o;
}
– Powinieneś przeprowadzić to sprawdzenie przed każdą konwersją rozszerzającą, chyba że jesteś w 100% pewien, jakiego typu jest dany obiekt.
– Kumam.
GO TO FULL VERSION