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ść ?
Jak utworzyć nowy obiekt dla referencji przekazanej jako argument metody?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2412
Zwracaj obiekty z funkcji zamiast tworzyc jakas patologie.
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: XML Hills
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.
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2412
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.
- Rejestracja: dni
- Ostatnio: dni
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.