我有两个对象A1和A2,须在A1中使用A2,且须在A2中使用A1:class A1
 {A2 b;
   public A1(A2 a) {b=a;}
   ...
 }但是如何在A2中使用A1?class A2
 {A1 b;
...
  void setA1(A1 a) {b=a;}
...
 }这样可以在A1中调用 b.setA1(this);是不是只能这样?如何修改能使结构好一点?

解决方案 »

  1.   

    现在我只能这样编(代码如下),请flyforlove和insiku指教!谢谢!
    class A1
     {A2 b;
       public A1(A2 a) {a.setA1(this); b=a;}
       ...
     }class A2
     {A1 b;
    ...
      void setA1(A1 a) {b=a;}
    ...
     }
      

  2.   

    这样写问题能解决问题,但是实例化的顺序就固定了,就是必须先实例化A2,再实例化A1,如果两各个类是平等的,那么最好实现也是平等的,class A1{
       private A2 a2;
       public A1(){
       }
       public setA2(A2 a2){
         this.a2 = a2;
       }
    }class A2{
       private A1 a1;
       public A2(){
       }
       public setA1(A1 a1){
         this.a1 = a1;
       }
    }
    这样,先实例化哪个都无所谓
    A1 a1 = new A1();
    A2 a2 = new A2();
    a1.setA2(a2);
    a2.setA1(a1);
      

  3.   

    楼上的还有问题,这样set的时候需要设置2次
    可以把以上2步一次完成
    class A1
    {
       A2 a2;
       void connect(A2 a2)
       {
          this.a2=a2;
          a2.a1=this;
       }
    }
    class A2
    {
       A1 a1;
       void connect(A1 a1)
       {
          this.a1=a1;
          a1.a2=this;
       }
    }//测试代码
    A1 a1=new A1();
    A2 a2=new A2();
    a1.connect(a2);
    //a2.connect(a1);
      

  4.   

    本来按楼主的意思,A中有B,B中有A,天生的双胞胎,难道还要硬拆开不成?
      

  5.   

    感谢flyforlove和redduke1202参与讨论!偶是业余水平的程序员,所以总觉得自己编的不够专业。
    感觉flyforlove和redduke1202是专业水平的吧,看了两位回复,偶觉得胜读十年书!其实A1和A2并不是平等的,A1和A2不是双胞胎,A1相当于一个用户列表,A2相当于小组管理器(每个小组由若干用户组成),如果合并,好像代码太长太复杂。