Przekazanie obiektu z klasy głównej inym klasom

0

Mam taki kod:


public class Klasa1{

     ArrayList lista;

     public Klasa1(){
          lista = new ArrayList();
     }

     public static void main(String args[]){
          Klasa1 klasa1 = new Klasa1();
           
          klasa1.lista....//odczytuje dane do ArrayList;
     }

     public void setLista(){
     //??
     }
}

Jak mam przekazac referencje lista do innej klasy. Wiem ze obiekt jest widoczny tylko wewnątrz main, ale niemoge go zadeklarowac poza main bo nie jest static. Obiekt tworze, żeby lista nie musiała byc static. Mógłbym zadeklarowac ArrayList w main ale wtedy tez będzie ona widoczna tylko w tej metodzie.
Luuki próbował mi pomóc ale stracił cierpliwość:).

Samos

0

Jak chcesz przekazac do innej klasy to po prostu podajesz ja w parametrze metody czy tez konstruktora tej klasy. O to chodzi?

pozdrawiam
johny

0

No to wiem ale w tym przypadku obiekt jest wewnatrz main i jak mam go przekazac metodzie poza main?

0
samos napisał(a)

No to wiem ale w tym przypadku obiekt jest wewnatrz main i jak mam go przekazac metodzie poza main?

Ja chyba nie rozumiem w czym problem. Gdzie wywolujesz ta metode? Jesli wywolujesz ja w main no to mozesz przekazac po prostu. Jesli nie to pytanie gdzie?

pozdrawiam
johny

0

Ja chyba sie pomylilem:) zamaist setList powinno byc:

public ArrayList getLista(){
return klasa1.lista;
}
tylko poza main klasa1.lista nie jest widoczna.

I teraz w innej klasie do której chciałbym przekazac tę lista zrobiłbym

ArrayList lista;

w konstruktorze:
Klasa1 klasa1 = new Klasa1()
setLista(klasa1.getLista)

poza konstruktorem
public void setLista(ArrayList lista){
thi.lista = lista;
}

Ale nie wiem jak klasa1.lista przekazac poza main

0

Masz dwa wyjscia tak na oko. Albo robisz Klasa1 osobno, a metode main w klasie Main, ktora po to i tylko po to bedzie sluzyc (tak jest sensownie). Albo robisz metode statyczna w klasie Klasa1, ktora zwraca obiekt list na zasadzie singleton, ale to juz jest kombinowanie, do tego zreszta potrzebujesz liste robic statyczna.

Jest jeszcze trzecie :P wyjscie - wywolanie metode setLista w gruncie rzeczy inicjujesz w klasie Klasa1, bo w koncu gdzie sie lancuszek zaczyna. Wiec mozesz przeslac obiekt listy przez caly lancuszek (konstruktorami), z tymze jak to jest kilka konstruktorow po drodze to nie bedzie za ladnie wygladalo. Najlepsze jest wyjscie pierwsze i ja tak zazwyczaj robie. Z drugiej strony, czemu masz operacje dotyczace listy w dwoch roznych klasach? Zgodnie z zasada enkapsulacji obiekty wewnetrzne klas powinny zostac wewnetrzne, a klasa tylko udostepnia interfejs to obslugi tych skladowych. Wiec moze przemysl implementacje klas jeszcze raz? Albo podaj troche wiecej kodu (w szczegolnosci powiazanie miedzy klasa Klasa1, a klasa posiadajaca setLista), to moze cos da sie wiecej podpowiedziec.

pozdrawiam
johny

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