Przekazywanie pustej tablicy obiektów do metody - jak?

0

Mam metodę:

public static void readProductsData(Product[] products)

a w funkcji main() tablicę:

Product[] products;

Dopiero w metodzie zostanie ustalona liczba elementów tablicy products (zostanie pobrana od użytkownika) a obiekt utworzony operatorem new. Sterowanie wraca do funkcji main, a nad products pracują kolejne metody.

Problem w tym, że kompilator nie pozwala przekazać nieutworzonego obiektu. Jak sobie z tym poradzić?

Tablica products musi być przekazywana jako parametr (referencja) do metod (wymóg zadania).

0

Jeśli dobrze cię rozumiem to odpowiedź brzmi: nie da się tak zrobić. Nie ma czegoś takiego jak referencja do nieutworzonego obiektu.

0

Zrób sobie klasę z publicznym typu tablicy i obiekt tej klasy przekazuj jako parametr. Trochę brzydkie rozwiązanie, ale powinno działać.

0

Te referencje chyba nie działają w Javie.

Przekazuję do metody

public static void readProductsData(Product[] products)

już utworzoną tablicę

products = new Product[10];

w metodzie wypełnia ją obiektami typu Product

product[0] = new Product(...) itd.

a po zakończeniu i powrocie do main okazuje się, że products nadal jest wypełniony null-ami :(

0

Referencja jest na obiekt. Jak tworzysz nowy obiekt, to referencja w metodzie wskazuje na ten nowy obiekt, a stara w miejscu wywołania metody nadal wskazuje na stary obiekt.

0

Tylko, że ja przekazuję obiekt tablicy a dopiero w metodzie tworzę obiekty będące jej elementami.
Jak pisałem w C i C++ to też tworzyło się wcześniej tablice z 10 wskaźnikami, a później dla każdej pozycji tworzyło się dynamicznie nową zmienną.

0

Jak siadasz do Javy to zapomnij o C/C++ (mam na myśli podstawowy poziom). Lepiej zamiast tablicy użyć listy.

0

Tak swoją drogą, warto również wziąć pod uwagę fakt, że obiekty w Javie nie są przekazywane poprzez referencję (ciekawe ile osób się nie zgodzi po przeczytaniu tego :P).

1
devnoob napisał(a):

Te referencje chyba nie działają w Javie.
Przekazuję do metody

public static void readProductsData(Product[] products)

już utworzoną tablicę

products = new Product[10];

w metodzie wypełnia ją obiektami typu Product

product[0] = new Product(...) itd.

a po zakończeniu i powrocie do main okazuje się, że products nadal jest wypełniony null-ami :(

@devnoob kłamiesz albo nie umiesz skompilować poprawnie kodu...
http://ideone.com/Qu6Fc3

0

Od razu o kłamstwo wyzywajom :(

Muszę się temu przyjrzeć, bo jak napisałem to samo z tablicą intów a nie własnych obiektów to zadziałało.

0

No ale przeciez w linku który podałem masz tablicę obiektów...

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