Ese as Usuario es un casteo. Básicamente le están diciendo al compilador que no importa de que tipo sea el objeto que dice retornar getUsuarioPorCodigoDeValidacion ustedes van a asumir que siempre es Usuario
En este caso no significa ningún daño, pero es potencialmente peligroso. ¿Por qué? Imaginense esté escenario:
t1 - ustedes programan eso, su getUsuarioPorCodigoDeValidacion retorna un Usuario.. lo castean a Usuario de onda nomás
t2 - años después vengo yo, ustedes están en otra cosa, y tengo que refactorizar el código de la Home. Se me ocurre que en lugar de devolver Usuario va a devolver una super-interfaz del mismo: IUsuario. Hago el cambio y espero que cosas no compilen (porque claro, ahora la home devuelve otro tipo). Arreglo los problemas pero Sistema nunca me muestra un problema (porque ustedes castean lo que le devuelvo, así que para ustedes nada cambió). En runtime sigue andando todo jamón, yo no cambié las instancias concretas que construyo (siguen siendo Usuario). Ustedes en el servicio castean mi IUsuario a Usuario y nada se rompe.
t3- despues viene Ronny y se le ocurre cambiar las instancias concretas que la home devuelve. Total, todo el mundo debería estar solamente acoplado a IUsuario, el tipo que aparece como valor de retorno en la home. Cambia la instancia completa a UsuarioDecorator, todo sigue compilando de maravillas. En runtime, la cosa explota. Si tenía tests me voy a dar cuenta enseguida. Si no había tests me puedo dar cuenta en un mal momento.
En varios lados tienen esto:
Ese
as Usuario
es un casteo. Básicamente le están diciendo al compilador que no importa de que tipo sea el objeto que dice retornargetUsuarioPorCodigoDeValidacion
ustedes van a asumir que siempre esUsuario
En este caso no significa ningún daño, pero es potencialmente peligroso. ¿Por qué? Imaginense esté escenario:
t1 - ustedes programan eso, su
getUsuarioPorCodigoDeValidacion
retorna unUsuario
.. lo castean aUsuario
de onda nomás t2 - años después vengo yo, ustedes están en otra cosa, y tengo que refactorizar el código de la Home. Se me ocurre que en lugar de devolverUsuario
va a devolver una super-interfaz del mismo:IUsuario
. Hago el cambio y espero que cosas no compilen (porque claro, ahora la home devuelve otro tipo). Arreglo los problemas peroSistema
nunca me muestra un problema (porque ustedes castean lo que le devuelvo, así que para ustedes nada cambió). En runtime sigue andando todo jamón, yo no cambié las instancias concretas que construyo (siguen siendoUsuario
). Ustedes en el servicio castean miIUsuario
aUsuario
y nada se rompe. t3- despues viene Ronny y se le ocurre cambiar las instancias concretas que la home devuelve. Total, todo el mundo debería estar solamente acoplado aIUsuario
, el tipo que aparece como valor de retorno en la home. Cambia la instancia completa aUsuarioDecorator
, todo sigue compilando de maravillas. En runtime, la cosa explota. Si tenía tests me voy a dar cuenta enseguida. Si no había tests me puedo dar cuenta en un mal momento.