Conversions de types de référence - 1

« Et maintenant, une brève leçon de Diego. Courte et sans fioritures. Sur les conversions des types de référence. »

« Commençons par les variables Object. Tu peux affecter tout type de référence à une telle variable (conversion avec élargissement). Cependant, pour effectuer l'affectation dans l'autre sens (conversion avec réduction), tu dois explicitement indiquer une opération de conversion : »

Code Description
String s = "maman";
Object o = s; // o stocke une valeur String
Une conversion de référence avec élargissement typique
Object o = "maman"; // o stocke une valeur String
String s2 = (String) o;
Une conversion de référence avec réduction typique
Integer i = 123; // o stocke une valeur Integer
    Object o = i;
Conversion avec élargissement.
Object o = 123; // o stocke une valeur Integer
String s2 = (String) o;
Erreur d'exécution !
Tu ne peux pas convertir une référence Integer en référence String.
Object o = 123; // o stocke une valeur Integer
Float s2 = (Float) o;
Erreur d'exécution !
Tu ne peux pas convertir une référence Integer en référence Float.
Object o = 123f; // o stocke une valeur Float
Float s2 = (Float) o;
Conversion dans le même type. Une conversion de référence avec réduction.

"Une conversion de référence avec élargissement ou réduction ne change l'objet d'aucune façon. La partie réduite (ou élargie) fait référence spécifiquement au fait que l'opération d'affectation inclut (ou n'inclut pas) la vérification de type de la variable et de sa nouvelle valeur. »

« C'est le rare exemple où tout est clair. »

« Pour éviter les erreurs dans ces exemplesnous avons un moyen de déterminer quel type est référencé par la variable Object : »

Code
int i = 5;
float f = 444.23f;
String s = "17";
Object o = f;                       // o stocke une valeur Float

if (o instanceof  Integer)
{
    Integer i2 = (Integer) o;
}
else if (o instanceof Float)
{
    Float f2 = (Float) o;            // Ce bloc if sera exécuté
}
else if (o instanceof String)
{
    String s2 = (String) o;
}

« Tu dois effectuer cette vérification avant chaque conversion avec élargissement, sauf si tu es sûr à 100 % du type de l'objet. »

« Compris. »