Conversies van referentietypes - 1

'En nu een korte les van Diego. Kort en bondig. Over conversies van referentietypes.'

"Laten we beginnen met objectvariabelen. U kunt elk referentietype aan zo'n variabele toewijzen ( verbredende conversie ). Om de toewijzing echter in de andere richting te maken ( vernauwende conversie ), moet u expliciet een cast-bewerking aangeven:"

Code Beschrijving
String s = "mom";
Object o = s; // o stores a String
Een typische verbredende referentieconversie
Object o = "mom"; // o stores a String
String s2 = (String) o;
Een typische versmallende referentieconversie
Integer i = 123; // o stores an Integer
Object o = i;
Verbredende conversie.
Object o = 123; // o stores an Integer
String s2 = (String) o;
Runtime-fout!
U kunt geen Integer-referentie casten naar een String-referentie.
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
Runtime-fout!
U kunt geen Integer-referentie casten naar een Float-referentie.
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
Ombouw naar hetzelfde type. Een versmallende referentieconversie.

" Een verbredende of vernauwende referentieconversie verandert het object op geen enkele manier. Het vernauwende (of versmallende) deel verwijst specifiek naar het feit dat de toewijzingsbewerking typecontrole van de variabele en de nieuwe waarde omvat (niet omvat). "

"Dit is het zeldzame voorbeeld waarin alles duidelijk is."

"Om de fouten in deze voorbeelden te voorkomen ,  hebben we een manier om erachter te komen naar welk type wordt verwezen door de objectvariabele: "

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

"U moet deze controle vóór elke verbredingsconversie uitvoeren, tenzij u 100% zeker bent van het objecttype."

"Begrepen."