Explicit casting es required, and succeed.
La razón por la que se necesita es porque no siempre éxito: una variable declarada como A x
puede referirse a casos que no son instanceof B
.
// Type mismatch: cannot convert from Object to String
Object o = "Ha!";
String s = o; // DOESN'T COMPILE
// Compiles fine, cast succeeds at run-time
Object o = "Ha!";
String s = (String) o;
// Compiles fine, throws ClassCastException at run-time
Object o = Boolean.FALSE;
String s = (String) o;
Sea o no un elenco que se requiere es determinado únicamente por los tipos declarados de las variables que intervienen, NO por los tipos de los objetos que se están refiriendo a en tiempo de ejecución. Esto es cierto incluso si las referencias se pueden resolver en tiempo de compilación.
final Object o = "Ha!";
String s = o; // STILL doesn't compile!!!
Aquí, a pesar de que la variable final
o
se referirá siempre a un instanceof String
, su tipo declarado sigue siendo Object
, y por lo tanto una explícita (String)
reparto es todavía necesario para compilar.
Muchas gracias. Lo entiendo completamente ahora. – XpdX
@XpdX: entonces debes aceptar esto como la respuesta correcta. –