Czy w kontruktorze klasy mogę użyć List z daną klasą?

0

Załóżmy, że mam jakąś klasę banalną o nazwie MojaKlasa, chcę wiedzieć czy mogę w jej konstruktorze wklepać kod typu:

List<MojaKlasa> mojaKlasa = new ArrayList<MojaKlasa>();
mojaKlasa.add(new MojaKlasa("test1");
mojaKlasa.add(new MojaKlasa("test2");
// i tak dalej

a później w dowolnej klasie stworzyłbym tę klasę w jednej linijce, a w kolejnych używałbym metody (...).get(indeks).nazwa by dostać jakiś tekst z konkretnej pozycji z List.
Może dość zagmatwany temat, ale zapytać można. Bo do tej pory używałem jedynie wypełniania listy w innych klasach i chcę się teraz dowiedzieć czy da radę wypełniać listę z klasą w konstruktorze tej klasy.

0

Raczej odpada, w taki sposób jaki to opisałeś spowoduje zapętlenie programu. Nie do końca ogarniam co chcesz osiągnąć. Ale czy nie lepiej utworzyć statyczne property dla klasy i tam przypisać liste ?

0

Możesz po prostu to skompilować i sprawdzić :D

Można, tworzenie klasy i obiektu to dwie różne rzeczy. Konstruktor jest wywoływany podczas tworzenia obiektu.
Za mało myślenia z mojej strony :D

0
class Test{
public List<MojaKlasa> mojaKlasa;
public void Test(){
mojaKlasa = new ArrayList<MojaKlasa>();
mojaKlasa.add(new MojaKlasa("test1");
mojaKlasa.add(new MojaKlasa("test2");
}
}

.. gdzies dalej 
new Test().mojaKlasa.get(1);
0

@Pijany Kot wklepać możesz ale nie zadziała za dobrze. Musiałyś tą swoją listę tworzyć statyczna w bloku static{} i wtedy miałaby jakiś sens.

0
List<MojaKlasa> mojaKlasa = new ArrayList<MojaKlasa>();
mojaKlasa.add(new MojaKlasa("test1");
mojaKlasa.add(new MojaKlasa("test2");

Zastanówmy się. Pierwsza linijka jest OK, tworzy listę.
Ale w następnych, jeśli new MojaKlasa("test1") wywołuje ten sam konstruktor, w którym znajduje się ta właśnie linijka, to znaczy że wewnątrz new MojaKlasa("test1") wywołujesz new MojaKlasa("test1"), wewnątrz którego wywołujesz new MojaKlasa("test1"), wewnątrz którego... teoretycznie w nieskończoność, a w praktyce do przepełnienia stosu i wywalenia programu.

0

Jak dla mnie to jakiś nonsens:

public class MyClass
{
    List<MyClass> list;
    String name;
    
    int level;    // <- warunek zatrzymania rekurencji

    public MyClass(String name)
    {
        this.name = name;
        this.list = new ArrayList<MyClass>();
        this.list.add(new MyClass(name));
    }
}

Żeby uniknąć tego przepełniania stosu należałoby pewnie zakończyć (tzn. nie tworzyć kolejnych instancji) po którymś tam levelu tylko jak tu określić ten poziom zagnieżdżenia? Dajmy na to level = 1, poziom 1, level = 2, poziom 2 itd... ???

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