Referenstypkonverteringar - 1

"Och nu, en kort lektion från Diego. Kort och rakt på sak. Om referenstypkonverteringar."

"Låt oss börja med objektvariabler. Du kan tilldela vilken referenstyp som helst till en sådan variabel ( bredningsomvandling ). Men för att göra tilldelningen åt andra hållet ( avsmalnande omvandling ), måste du uttryckligen ange en gjutningsoperation:"

Koda Beskrivning
String s = "mom";
Object o = s; // o stores a String
En typisk breddad referenskonvertering
Object o = "mom"; // o stores a String
String s2 = (String) o;
En typisk avsmalnande referenskonvertering
Integer i = 123; // o stores an Integer
Object o = i;
Breddande konvertering.
Object o = 123; // o stores an Integer
String s2 = (String) o;
Runtime error!
Du kan inte casta en heltalsreferens till en strängreferens.
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
Runtime error!
Du kan inte casta en heltalsreferens till en flytande referens.
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
Konvertering till samma typ. En avsmalnande referenskonvertering.

" En breddande eller avsmalnande referenskonvertering ändrar inte objektet på något sätt. Den avsmalnande (eller breddande) delen hänvisar specifikt till det faktum att tilldelningsoperationen inkluderar (inte inkluderar) typkontroll av variabeln och dess nya värde. "

"Detta är det sällsynta exemplet där allt är klart."

"För att undvika felen i dessa exempel har vi ett sätt att ta reda på vilken typ som refereras till av  objektvariabeln: "

Koda
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öra den här kontrollen före varje breddningskonvertering om du inte är 100 % säker på objektets typ."

"Jag fattar."