[Java] Korzystanie z listy w innej klasie
Ostatnio zmodyfikowano 2012-03-28 11:04
thamiar Temat założony przez niniejszego użytkownika |
[Java] Korzystanie z listy w innej klasie » 2012-03-26 21:49:08 Witam! Mam pewien problem, z którym nie mogę sobie poradzić :(
W klasie main mam liste obiektów, którą chcę wypisać System.out.printem w innej klasie. Dowiedziałem się, że w Javie nie ma funkcji i jedynym sposobem przekazania takiej listy, jest napisanie jakiejś metody pobierającej interesujące mnie dane i zapisujące ją w polach klasy. Tyle, że nie mam najmniejszego pojęcia jak to w ogóle miało by wyglądać. Próbowałem (extenda), próbowałem sposobów znanych z C++, ale nic nie mogę wykombinować. I drugie pytanie:Można zrobić tak, by przy zmianie danych (tych skopiowanych) spowodować identyczną zmianę w klasie main? |
|
DejaVu |
» 2012-03-26 22:42:47 W C++:
class Klasa { public: std::vector < Obiekt >& dajObiekty() { return m_vObiekty; } private: std::vector < Obiekt > m_vObiekty; };
class InnaKlasa { public: void wypiszObiekty( Klasa & klasa ) { std::vector < Obiekt >& vObiekty = klasa.dajObiekty(); } };
|
|
npHard |
» 2012-03-27 09:14:58 Przykładowy kod. Umieszczam w tagach c++ więc kolorowanie może być średnie... Ale lepsze to niż nic
test.java - główna klasa
package test; import java.util.ArrayList;
public class Test { public static void main( String[] args ) { TestClass tc = new TestClass(); tc.addToList( "string1" ); tc.addToList( "string2" ); tc.printList(); ArrayList < String > l = tc.getPrivateList(); l.add( "string3" ); System.out.println( l ); tc.printList(); } }
TestClass.java - testowana klasa zawierająca prywatną listę
package test; import java.util.ArrayList;
public class TestClass { private ArrayList < String > privateList = new ArrayList < String >(); public ArrayList < String > getPrivateList() { return privateList; } public void addToList( String str ) { privateList.add( str ); } public void printList() { System.out.println( privateList ); } }
Wynik programu to:
[string1, string2]
[string1, string2, string3]
[string1, string2, string3] |
Pierwsze pytanie. Tak jak powiedział DejaVu: musisz zrobić gettera czyli metodę pobierającą prywatne pole klasy. Jeśli piszesz w Netbeansie to on potrafi sam generować gettery i settery, ale nie tylko.
Drugie pytanie. Jeśli pobierasz listę takim setterem to nie jest tworzona żadna kopia. W javie wszystko przekazywane jest przez referencję, czyli w funkcji main prywatna lista TestClass to to samo co zmienna l . Widać to po wyniku programu. Dodałem coś do l a po wywołaniu tc.printList(); również się to wypisało |
|
thamiar Temat założony przez niniejszego użytkownika |
» 2012-03-28 11:04:59 Bardzo dziękuje :) Ogarnąłem problem... eh, za dużo przyzwyczajeń z C++ :( |
|
« 1 » |