Conversioni del tipo di riferimento - 1

"E ora, una breve lezione da Diego. Breve e pertinente. Sulle conversioni dei tipi di riferimento."

"Iniziamo con le variabili Object. Puoi assegnare qualsiasi tipo di riferimento a tale variabile ( conversione di ampliamento ). Tuttavia, per eseguire l'assegnazione nell'altra direzione ( conversione di restringimento ), devi indicare esplicitamente un'operazione di cast:"

Codice Descrizione
String s = "mom";
Object o = s; // o stores a String
Una tipica conversione di riferimento di ampliamento
Object o = "mom"; // o stores a String
String s2 = (String) o;
Una tipica conversione di riferimento di restringimento
Integer i = 123; // o stores an Integer
Object o = i;
Conversione allargata.
Object o = 123; // o stores an Integer
String s2 = (String) o;
Errore di runtime!
Non è possibile eseguire il cast di un riferimento Integer a un riferimento String.
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
Errore di runtime!
Non è possibile eseguire il cast di un riferimento Integer a un riferimento Float.
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
Conversione allo stesso tipo. Una conversione di riferimento restringente.

" Una conversione di riferimento di ampliamento o restringimento non modifica l'oggetto in alcun modo. La parte di restringimento (o ampliamento) si riferisce specificamente al fatto che l'operazione di assegnazione include (non include) il controllo del tipo della variabile e del suo nuovo valore. "

"Questo è il raro esempio in cui tutto è chiaro."

"Per evitare gli errori in questi esempiabbiamo un modo per scoprire a quale tipo fa riferimento la variabile Object: "

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

"Dovresti eseguire questo controllo prima di ogni conversione di ampliamento a meno che tu non sia sicuro al 100% del tipo di oggetto."

"Fatto."