Dostęp do metod obiektu

0

Witam,
mam taki przypadek:

2 klasy, każda z nich ma tylko konstruktor z parametrami, żaden obiekt/instancja jednej klasy nie istnieje w drugiej,
teraz moje pytanie:
jak stworzyć w jednej z tych klas obiekt tej drugiej, który daje możliwość dostępu do jej metod (bez używania konstruktora z parametrami ) z wpływem na obiekt który powstał w wyniku wywołania konstruktora parametrowego gdzieś tam... - można napisać konstruktor bezparametrowy ale czy wtedy nie mamy możliwości wpłynąć na tamten obiekt bo jest osobną instancją ?

1

Niezbyt rozumiem problem, czy takie rozwiązanie przejdzie?

class DrugaKlasa
{
    PierwszaKlasa ref;
    public void setRef(ref);
    {
         this.ref = ref;
    }
    ...
}
class PierwszaKlasa
{
    ...
    DrugaKlasa ob = new DrugaKlasa();
    ob.setRef(this);
    ...
}
0

Jak rozumiem mamy klasy A i B mające konstruktory z parametrami? Chcesz w obiekcie klasy A utworzyć obiekt klasy B bez jawnego wywołania konstruktora by mieć dostęp do jego metod?

  1. Zrób to koszernie dopisz odpowiednie konstruktory albo użyj istniejących przekazując im null zamiast parametrów.
  2. Zrób to niekoszernie z wykorzystaniem refleksji i przekazując null jako parametry.
  3. Zrób to na prawdę niekoszernie używając ASM i dodają dynamicznie konstruktor do kodu klasy.

To chyba wszystkie rozsądne opcje.

0

@haikari wydaje mi się że @bogdans dobrze cię zrozumiał: ty nie chcesz wołać żadnych kontruktorów! Ty potrzebujesz przekazać do obiektu swojej klasy REFERENCJE do obiektu który "chciałbyś zmieniać".
Możesz taką referencję dodać jako kolejny argument kontruktora swojej klasy, ale zrobić metodę która taki parametr ustawia (patrz: post bogdansa powyżej)

0
Koziołek napisał(a):

Jak rozumiem mamy klasy A i B mające konstruktory z parametrami? Chcesz w obiekcie klasy A utworzyć obiekt klasy B bez jawnego wywołania konstruktora by mieć dostęp do jego metod?

dokładnie, ale dodatkowo jeszcze czy za pomocą tego obiektu i jego metod będę miał wpływ na instancję/stan innego obiektu tej klasy, który jest utworzony w klasie C gdzie konstruktor otrzymuje parametry ? chciałbym mieć wpływ na jego stan np. pole boolean

0

Odpowiedź brzmi nie, bo w obiekcie B musisz mieć referencję do C... no chyba, że C utworzysz w B też przez refleksję, co prowadzi do naprawdę dziadowskiego rozwiązania...

0

Ja się nie zagdzam. To zalezy JAK to wszystko jest zrobione i co chcesz osiągnąć. @haikari często tak jest że ludzie wpadają na zły pomysł i pytają na forum jak go zrealizować, zamiast spytać "jak zrobić XYZ poprawnie". Napisz co chcesz uzyskać, może jednak da się to zrobić po ludzku.
Poza tym może na przykład Dependency Injection jest tu rozwiązaniem? Albo ServiceLocator? Albo Singleton?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.