Foros del Web » Programación para mayores de 30 ;) » Java »

validacion de gets anidados

Estas en el tema de validacion de gets anidados en el foro de Java en Foros del Web. buen dia, lo que quisiera saber es lo siguiente. supongamos que tengo una estructura de datos y por ejemplo tengo: objeto1.getObjeto2().getObjeto3().getObjeto4().get Valor(); pero el problema ...
  #1 (permalink)  
Antiguo 22/02/2014, 00:42
 
Fecha de Ingreso: mayo-2011
Mensajes: 32
Antigüedad: 13 años
Puntos: 1
validacion de gets anidados

buen dia, lo que quisiera saber es lo siguiente.

supongamos que tengo una estructura de datos y por ejemplo tengo:

objeto1.getObjeto2().getObjeto3().getObjeto4().get Valor();

pero el problema es que tal si cada objeto pudiera ser nulo.

no quisiera andar poniendo:

if(objeto1.getObjeto2() != null)
{
if(objeto1.getObjeto2().getObjeto3() != null)
{
...
}
}

ni tampoco:

try
{
objeto1.getObjeto2().getObjeto3().getObjeto4().get Valor();
}
catch(Exception e)
{
}

abra alguna forma de que pueda pasar toda esa instruccion como cadena y validarla en un metodo para que solo me mande el valor si se puede acceder o "" si no se puede?
  #2 (permalink)  
Antiguo 22/02/2014, 01:52
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: validacion de gets anidados

Hola:

Desde el punto de vista de encapsulación de objetos no es correcto hacer ese tipo de llamaddas o1.getO2().getO3().getO4().getValor(). El código que usa esto "sabe" que objeto1 tiene dentro un objeto2 que tiene dentro un objeto3 que a su vez tiene un objeto4, es decir, conoce las "interioridades" de objeto1 hasta 4 niveles de profundidad. Lo correcto sreía que o1 tuviera directamente un getValor() y objeto2 tambien y objeto3 también y objeto4 también. El getValor() de objeto1 devolveria el o2.getValor() y este devolververía el o3.getValor() y así sucesivamente. Esto, además de ser más correcto, solucionaría tu problema, ya que la comprobación de si alguno es null la haría cada objeto sólo del objeto que tiene por debajo. objeto1 tendría

Código Java:
Ver original
  1. public Object getValor() {
  2.    if (o2 != null)
  3.       return o2.getValor()
  4.    else
  5.       return null;
  6. }

Lo de o1.geto2().geto3().geto4() lo prohíbe la ley de Demeter y es contra el patrón "no hables con extraños" http://certified-es.blogspot.com.es/...la-ley-de.html

Si no quieres hacer esto, la única forma de evitar todos esos null sería meter esa llamada en un try-catch

Código Java:
Ver original
  1. Objet valor=null;
  2. try {
  3.     valor = objeto1.getObjeto2().getObjeto3().getObjeto4().get Valor();
  4. } catch (Exception e) {
  5. }

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 22/02/2014, 02:25
 
Fecha de Ingreso: mayo-2011
Mensajes: 32
Antigüedad: 13 años
Puntos: 1
Respuesta: validacion de gets anidados

pues si todo lo que me dices es correcto y lo se, el problema es que no es mi programa y no puedo reestructurarlo por muchos motivos, lo del try pues es la respuesta trivial aunque parece que la unica tambien gracias de todas formas.

Etiquetas: anidados, metodo, validacion, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:58.