Referencetypekonverteringer - 1

"Og nu en kort lektion fra Diego. Kort og præcist. Om referencetypekonverteringer."

"Lad os starte med objektvariabler. Du kan tildele en hvilken som helst referencetype til en sådan variabel ( udvidelseskonvertering ). Men for at foretage tildelingen i den anden retning ( indsnævring af konvertering ), skal du udtrykkeligt angive en støbeoperation:"

Kode Beskrivelse
String s = "mom";
Object o = s; // o stores a String
En typisk udvidende referencekonvertering
Object o = "mom"; // o stores a String
String s2 = (String) o;
En typisk indsnævre referencekonvertering
Integer i = 123; // o stores an Integer
Object o = i;
Udvidelseskonvertering.
Object o = 123; // o stores an Integer
String s2 = (String) o;
Kørselsfejl!
Du kan ikke caste en heltalsreference til en strengreference.
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
Kørselsfejl!
Du kan ikke caste en heltalsreference til en Float-reference.
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
Konvertering til samme type. En indsnævrende referencekonvertering.

" En udvidende eller indsnævrende referencekonvertering ændrer ikke objektet på nogen måde. Indsnævringsdelen (eller udvidende) henviser specifikt til det faktum, at tildelingsoperationen inkluderer (ikke inkluderer) typekontrol af variablen og dens nye værdi. "

"Dette er det sjældne eksempel, hvor alt er klart."

"For at undgå fejlene i disse eksempler har vi en måde at finde ud af ,  hvilken type der refereres til af objektvariablen: "

Kode
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;
}

"Du bør udføre denne kontrol før hver udvidelseskonvertering, medmindre du er 100 % sikker på objektets type."

"Forstået."