Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Java] Korzystanie z listy w innej klasie

Ostatnio zmodyfikowano 2012-03-28 11:04
Autor Wiadomość
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?
P-53267
DejaVu
» 2012-03-26 22:42:47
W C++:
C/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();
    }
};
P-53268
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
C/C++
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ę
C/C++
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
P-53280
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++ :(
P-53343
« 1 »
  Strona 1 z 1