2014-09-04 2 views
0

JAVAJava ссылка на внешний объект от внутреннего объекта

public class A { 
    string amountA; 
    B b; 
} 

public class B { 
    string amountB; 

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

Кроме того, мне нужно установить amountA = значение ;. Является ли это возможным? См основного метода

 } 
} 

... 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' 
} 
+1

Обратите внимание, что с тем, как ваши фигурные скобки, В ** не ** внутренний класс А –

+1

, пожалуйста, напишите весь исходный код. Является ли класс B внутренним классом класса A? –

+0

этот код не компилируется – PeterMmm

ответ

1

Если вам нужно установить как valueA и ValueB к тому же value, что имеет смысл иметь сеттер в классе A что бы установить оба из них:

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

You не может получить доступ к экземпляру A из экземпляра B, поскольку B не является внутренним классом A. Вы можете создать экземпляр B, который вообще не связан с каким-либо экземпляром A.

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(); 

Но я никогда не использовал это.

Внутренние классы практичны для элемента контейнера, имеющего доступ к его классу контейнера.

Другим решением является создание метода в A с объектом B в качестве параметра или около того.

0

Это звучит, как вы хотите иметь получить из B, а не содержат Экземпляр B. Таким образом, значение а в случае А и значение а в экземпляре B, связанного с этим экземпляром действительно являются одной и той же переменной. Вы также можете иметь данные в А, не разделяемые с B, объявив его в A. Например,

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' 
    } 
Смежные вопросы