Referansetypekonverteringer - 1

"Og nå, en kort leksjon fra Diego. Kort og til poenget. Om referansetypekonverteringer."

"La oss starte med objektvariabler. Du kan tilordne en hvilken som helst referansetype til en slik variabel ( utvidelseskonvertering ). Men for å gjøre tilordningen i den andre retningen ( innsnevringskonvertering ), må du eksplisitt angi en støpeoperasjon:"

Kode Beskrivelse
String s = "mom";
Object o = s; // o stores a String
En typisk utvidende referansekonvertering
Object o = "mom"; // o stores a String
String s2 = (String) o;
En typisk innsnevrende referansekonvertering
Integer i = 123; // o stores an Integer
Object o = i;
Utvidende konvertering.
Object o = 123; // o stores an Integer
String s2 = (String) o;
Kjøretidsfeil!
Du kan ikke caste en heltallsreferanse til en strengreferanse.
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
Kjøretidsfeil!
Du kan ikke caste en heltallsreferanse til en flytende referanse.
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
Konvertering til samme type. En innsnevrende referansekonvertering.

" En utvidende eller innsnevrende referansekonvertering endrer ikke objektet på noen måte. Innsnevringsdelen (eller utvidelsesdelen) refererer spesifikt til det faktum at tilordningsoperasjonen inkluderer (ikke inkluderer) typekontroll av variabelen og dens nye verdi. "

"Dette er det sjeldne eksemplet hvor alt er klart."

"For å unngå feilene i disse eksemplene har vi  en måte å finne ut hvilken type som refereres til av objektvariabelen: "

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 utføre denne kontrollen før hver utvidelseskonvertering med mindre du er 100 % sikker på objektets type."

"Har det."