我遇到一个程序设计问题。比如,我有对象如下public class test {
public static void Main(String[] args) {

ObjLvl1 obj = new ObjLvl1();
//get somedata here with ObjLvl1
}
}public class ObjLvl1 {
ObjLvl2 obj = new ObjLvl2();
}public class ObjLvl2 {
ObjLvl3 obj = new ObjLvl3();
}public class ObjLvl3 {
int somedata;
}
问题是,不在Main里直接调用 ObjLvl3, 和ObjLvl2,只是用 ObjLvl1,
我怎么把 somedata从 ObjLvl3里提取出来。我的唯一的方法是在每个类里写一个get方法,然后一层一层把somedata从ObjLvl3里提取到Main里。还有其他更好的方法么?因为这代码很难维护,以后修改起来也比较麻烦。

解决方案 »

  1.   


    如果ObjLvl3里以后追加了20个变量,你ObjLvl2和 ObjLvl1怎么办?都写个get方法?
      

  2.   

    那你想怎么直接获取?
    从你的描述来说
    ObjLvl1使用ObjLvl3,ObjLvl2,Main使用ObjLvl1
    Main如果不和ObjLvl3,ObjLvl2打交道,那么ObjLvl3,ObjLvl2的属性或方法访问,只能通过ObjLvl1
    提供接口来管理,Main如果想直接和ObjLvl3,ObjLvl2打交道,那么也由ObjLvl1提供接口直接返回ObjLvl3,ObjLvl2对象
      

  3.   

    那你可以考虑用反射的方式来处理,就像一些框架调用setter/getter一样
      

  4.   


    商业开发上,尤其是数据对象化(ORM)和处理,会遇到这种复杂问题。
      

  5.   

    想到了 一个场景   和你这个有点相似  因为你没提供语境。比如说我们设计  一个论坛 系统      
    首先 要有   论坛 Forum   论坛里面 有 Thread  也就是相当于我们的一个帖子   Thread 里面又有Message就是我们帖子里有消息。  在领域驱动设计里面 。。我们是这样做得。我们要想得到 Message 的信息  就需要 通过Forum 得到 Thread 在通过Thread 得到 Message  这样是为了保证我们设计的完整性和健全性。
    按你的题难道也是这个意思? 为了控制访问 C的属性必须 以A作为入口?  
      

  6.   


    没有确切的语境。所以你可以看成 C++ / Java类的
      

  7.   


    这个题目貌似很接近啊。数据要从第三层提取到底一层。 那么如果Message里还有东西呢,也就是还有2,3层,这就麻烦了。反正这道题没正确档案。给出你认为是正确的解答,然后说明为什么,然后大家来讨论。
      

  8.   

    别想的太复杂了,直接访问就可以了
    //get somedata here with ObjLvl1
    System.out.println(obj.obj.obj.somedata);