java从内部对象引用外部对象

时间:2014-09-04 17:03:32

标签: java

JAVA

public class A {
  string amountA;
  B b;
}

public class B {
  string amountB;

   public void setValue(String value) {
      amountB = value;       

另外,我需要设置amountA = value;。可能吗?参见主要方法

      }
}

... main(String... args) {
   A a = new A();
   B b = a.getB(); // b is a member of A
   b.setValue("25") // this should also change 'amountA' in object 'a' to '25'
}

3 个答案:

答案 0 :(得分:1)

如果您需要将valueAValueB设置为相同的value,那么在类A中设置一个可以设置它们的setter更有意义:

   public void setValue(String value) {
      amountA = value; 
      b.setValue(value);
   }

您无法从B的实例中访问A的实例,因为B不是A的内部类。您可以创建与A的任何实例完全无关的B实例。

答案 1 :(得分:0)

public class A {

    public class B {
        string amountB;

        public void setValue(String value) {
            amountB = value;       
            amountA = value; // Using A.this.amountA
        }
    }

    string amountA;

    public B createB() {
        return new B(); // Provides A.this to the B instance.
    }
}

... main(String... args) {
    A a = new A();
    B b = a.createB(); // b is created inside A
    b.setValue("25") // this should also change 'amountA' in object 'a' to '25'
}

您可以使用内部类。

类本身应该更好地创建实例,以便将A.this设置为b

可选地

B b = a.new B();

但我从来没有用过它。

内部类对于可以访问其容器类的容器元素是实用的。

另一个解决方案是使用B对象作为参数在A中创建一个方法。

答案 2 :(得分:0)

听起来你想要从B得到A 派生而不是包含 B的实例。这样,A的实例中的valueA和a中的valueA与该A实例关联的B实例实际上是同一个变量。您也可以通过在A中声明A中未与B共享的数据。例如,

public class A extends B {
   public String amountAonly; // a string in A that's not in B
   public B getB() { return (B)this; } // typecast to treat A like B
}

public class B {
   public String amountA; // a string that's in both A and B
   public void setValue(String value) {
      amountA = value;
   }
}
...
   main(String[] args) {
       A a = new A();
       B b = a.getB(); // b is the B associated with a
       b.setValue("25"); // will also change 'amountA' in object 'a' to '25'
    }