Java, przekazanie referencji jednego pola z bieżącej klasy

0

Witam
Cały czas uczę się programować.
Klasa A posiada jedno z wielu pól "int index' , w konstruktorze tej klasy tworze obiekt klasy B, który chciałbym żeby pozyskał referencje do pola z klasy A. Da się to zrobić bez przekazywania w konstruktorze całego obiektu A do obiektu B ?

class A {
private int index = 0;

public A() {
B b = new B();
}

}

class B {
private int index;

public A() {
}

}

3

@plugan300:

public A() {
B b = new B();
}

Tak się ogólnie nie robi. Poczytaj o wstrzykiwaniu zależności.

w konstruktorze tej klasy tworze obiekt klasy B, który chciałbym żeby pozyskał referencje do pola z klasy A. Da się to zrobić bez przekazywania w konstruktorze całego obiektu A do obiektu B ?

Nie łapie do końca o co chodzi. Wygląda mi to znowu na problem XY. Może napisz co ten kod ogólnie ma robić. Jaki problem masz rozwiązać. Jak to zadanie na studia, to wpisz treść.

2

No mozesz zrobić new B(index) zawsze, ale przekażesz tak tylko wartość bo int jest typem prymitywnym. Co więcej przekazanie Integer nie załatwi sprawy bo te są w Javie immutable i zmiana wartości wiąże się z utworzeniem nowego obiektu, więc te referencje od razy by się rozjechały. Musiałbyś to jakoś boxować, np.:

class A{
    private final AtomicReference<Integer> index = new AtomicReference<>();
    public A(){
        new B(index);
    }
}

I teraz jeśli A lub B zmieni zawartość tego atomic reference to nadal będą widzieć to samo.

2

Trochę gmatwasz problem i nie wiem czy to z braku wiedzy, czy już faktycznie pytasz o co pytasz.

  • Czy z klasy B, chcesz mieć dostęp do tego co aktualnie jest w klasie A?
  • Czy chcesz z poziomu klasy B zmieniać to co jest w klasie A?
  • Czy klasa B ma być używana gdzieś jeszcze, czy tylko w klasie A?

Jeżeli na pierwsze 2 pytania odpowiedziałeś "tak", to odpowiedź brzmi tak:
Da się tak zrobić w Javie, ale na szybko nie potrafię sobie wymyślić zastosowania, w którym było by to poprawne z punktu widzenia struktury aplikacji.
Np. klasa wewnętrzna ma możliwość dostania się prywatnych właściwości klasy zewnętrznej:

public class A{
  int index = 0;
  class B{
    public int doubledIndexA(){
      return A.this.index * 2;
    }
  }
}

Ale też nie da się w takim przypadku wykorzystać klasy B gdzie indziej. Zresztą same inner class nie są specjalnie pięknym rozwiązaniem.

2

chciałbym żeby pozyskał referencje do pola z klasy A

W jakim celu? Jak klasa B będzie używać tego pola?

1 użytkowników online, w tym zalogowanych: 0, gości: 1