问题如下:
已有一堆数据结构,全部为POJO,层次很深,经常需要如下代码:
if (a.getB() == null )
  a.setB(new B());
if (a.getB().getC() == null)
  a.getB().setC(new C());
if (a.getB().getC().getD() == null)
  a.getB().getC().setD(new D());
  ........
  a.getB().getC().getD().getE().....setZ("123");如何改进?

解决方案 »

  1.   

    可以在B,C对象中判断null的情况
      

  2.   

    象这种情况,第一是设计上做修正,减少层次,第二呢,确定检查的层次和责任. 比如 if (a.getB() == null )
      a.setB(new B()); (set之前就做判断, 或者使用带参数的构造函数,使代码简洁)
    if (a.getB().getC() == null)
      

  3.   

    if (a.getB() == null )
      a.setB(new B());
    if (a.getB().getC() == null)//这个应该放在new B()里面判断做(或者init方法)

    if(a.getB() == null)
      a.setB(new B());public class B {
      public B() {
        this.c = new C();//这里继续初始化自己的东西
      }
    }
      

  4.   

    再写一个get方法得了,比如
    getBNotNull() {
      if (B == null) {
        return new B();
      } else {
        return B;
      }
    }
      

  5.   

    我是菜鸟,很不明白楼主的意思
    难道楼主不知道自己的构造函数是怎么构造的么?
    新建了b的object,那b边是否有c的object应该是早定好的吧,如果不是的话,怎么对b的class编写构造函数?
      

  6.   

    To willishz(光与影的奇迹) :
    POJO只有getXXX()和setXXX(),XXX是已经存在于该类的域。To vinegar111():
    不一定的。如果将当作一棵树来看的化,这棵树新建的时候只有一个根节点。也就是说,A类的所有成员都等于null。如果我想设置a.b.c.d = 1,那我得先保证a,b,c != null