Jak utworzyć nowy obiekt dla referencji przekazanej jako argument metody?

0

Chodzi o to, że pewnej metodzie m przekazuje referencję a do obieku A i chciałbym wewnątrz tej metody do referencji a przypisać nowy obiekt. Niestety zdaje się, że java jako argument dla metod tworzy nową referencję do obiektu w związku z czym zapis (wewnątrz metody) a = new A nic mi nie daje ponieważ nowy obiekt zostaje przypisany do tej lokalnej referencji a nie oryginalnej. Da się to jakoś obejść ?

0

Zwracaj obiekty z funkcji zamiast tworzyc jakas patologie.

2

To jest Java, tutaj tak sie nie da - wszystko jest przekazywane przez wartosc, czyli robiona jest kopia. Jak przekazujesz prymitywy, robiona jest kopia wartosci; jak przekazujesz referencje do obiektow, robiona jest kopia tej referencji. Z ta wiedza mozna wywniskowac, ze jesli przypiszesz cos nowego w metodzie, to zmienisz tylko kopie, oryginal pozostaje bez zmian.
Jesli koniecznie chcesz dokonac to o czym piszesz, musisz uzyc pewnego triku i zasymulowac przekazywanie przez referencje - musisz zrobic wrappera ktory w sobie ma referencje do obiekty przekazywanego do metody, i w metodzie zmienic ta referencje. Ale lepiej tak nie rob, zwroc nowa referencje jako wartosc metody.

3

Najprostszą opcją byłoby po prostu przekazywanie mutowalnej Listy - wtedy można przez nią zwracać wyniki. Ale jeśli zwracasz jeden obiekt to zrób sobie klasę implementującą mutowalną listę maksymalnie jednoelementową.

PS:
Tak jak koledzy sugerują wyżej - używaj tylko gdy musisz, bo to krzywy hack.

0

Ok, dzięki za rady :)

0
Wibowit napisał(a):

Najprostszą opcją byłoby po prostu przekazywanie mutowalnej Listy - wtedy można przez nią zwracać wyniki. Ale jeśli zwracasz jeden obiekt to zrób sobie klasę implementującą mutowalną listę maksymalnie jednoelementową.

PS:
Tak jak koledzy sugerują wyżej - używaj tylko gdy musisz, bo to krzywy hack.

Najprosztsza opcja jest zdecydowanie przekazywanie jednoelementowej tablicy, tak mi sie wydaje.

0

Javowcem nie jest, ale dla mnie przekazywanie listy jako argument, gdy wiem, ze tam bedzie tylko 1 obiekt, to jest bardzo mylacy pomysl. IMO duzo sensowniej by bylo sobie zrobic wrappera na obiekt Ref<T> i tak przekazywac, przynajmniej bedzie wiadomo o co chodzi czytajac sygnature metody.

0

Totez napisalem wczesniej o wrapperze, jak najbardziej moze byc generyczny. Vibovitowi chodzilo chyba o to ze pomysl z lista / tablica jest najlatwiejszy bo nie trzeba tworzyc zadnych dodatkowych klas.

0

Nie trzeba nic w kodzie zmieniać, trzeba zmienić sposób myślenia. Co chcesz osiągnąć? Dziwią mnie konstruktywne odpowiedzi, samo pytanie nie ma zbyt wielkiego sensu.

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