Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/02/2014, 01:52
Avatar de chuidiang
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