Conversiones de tipo de referencia - 1

"Y ahora, una breve lección de Diego. Breve y al grano. Acerca de las conversiones de tipo de referencia".

"Comencemos con las variables de objeto. Puede asignar cualquier tipo de referencia a dicha variable ( conversión de ampliación ). Sin embargo, para realizar la asignación en la otra dirección ( conversión de reducción ), debe indicar explícitamente una operación de conversión:"

Código Descripción
String s = "mom";
Object o = s; // o stores a String
Una conversión de referencia de ampliación típica
Object o = "mom"; // o stores a String
String s2 = (String) o;
Una típica conversión de referencia de estrechamiento
Integer i = 123; // o stores an Integer
Object o = i;
Ampliación de la conversión.
Object o = 123; // o stores an Integer
String s2 = (String) o;
¡Error de tiempo de ejecución!
No puede convertir una referencia Integer a una referencia String.
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
¡Error de tiempo de ejecución!
No puede convertir una referencia Integer a una referencia Float.
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
Conversión al mismo tipo. Una conversión de referencia de estrechamiento.

Una conversión de referencia de ampliación o reducción no cambia el objeto de ninguna manera. La parte de reducción (o ampliación) se refiere específicamente al hecho de que la operación de asignación incluye (no incluye) la verificación de tipo de la variable y su nuevo valor. "

"Este es el raro ejemplo en el que todo está claro".

"Para evitar los errores en estos ejemplostenemos una forma de averiguar a qué tipo hace referencia la variable Objeto: "

Código
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;
}

"Debe realizar esta verificación antes de cada conversión de ampliación a menos que esté 100% seguro del tipo de objeto".

"Entiendo."