Referenciatípus-konverziók – 1

"És most egy rövid lecke Diego-tól. Röviden és lényegre törően. A referenciatípus-konverziókról."

"Kezdjük az objektumváltozókkal. Egy ilyen változóhoz tetszőleges hivatkozási típust rendelhet ( szélesítő konverzió ). A másik irányú hozzárendeléshez ( szűkítő konverzió ) azonban kifejezetten meg kell jelölni egy cast műveletet:"

Kód Leírás
String s = "mom";
Object o = s; // o stores a String
Tipikus kiszélesedő referencia konverzió
Object o = "mom"; // o stores a String
String s2 = (String) o;
Tipikus szűkítő referencia konverzió
Integer i = 123; // o stores an Integer
Object o = i;
Szélesítő konverzió.
Object o = 123; // o stores an Integer
String s2 = (String) o;
Futtatási hiba!
Nem adhat egész szám hivatkozást egy karakterlánc hivatkozáshoz.
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
Futtatási hiba!
Nem adhat egész szám hivatkozást Float hivatkozáshoz.
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
Átalakítás azonos típusra. Szűkítő referencia konverzió.

" A szélesítő vagy szűkítő hivatkozáskonverzió semmilyen módon nem változtatja meg az objektumot. A szűkítő (vagy szélesítő) rész kifejezetten arra utal, hogy a hozzárendelési művelet tartalmazza (nem tartalmazza) a változó és az új érték típusellenőrzését. "

"Ez az a ritka példa, ahol minden világos."

" A példákban szereplő hibák elkerülése érdekében módunk van kideríteni, hogy az Object változó milyen típusra hivatkozik :  "

Kód
int i = 5;
float f = 444.23f;
String s = "17";
Object o = f;                       // o stores a Float

if (o instanceof  Integer)
{
    Integer i2 = (Integer) o;
}
else if (o instanceof  Float)
{
    Float f2 = (Float) o;            // This if block will be executed
}
else if (o instanceof  String)
{
    String s2 = (String) o;
}

"Ezt az ellenőrzést minden bővítő konverzió előtt végre kell hajtania, hacsak nem 100%-ig biztos az objektum típusában."

"Megvan."