Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
KlassenObjekte nach erstellung in ArrayList speichern
Alsoo erstmal hallo an alle Leser das ist mein erster Beitrag in diesem Forum und ich hoffe ihr könnt mir helfen
Ich habe folgendes Problem: Wir sollen eine Klasse schreiben die folgendes macht ...
jede Instanz die erstellt wird soll in einer statischen ArrayList gespeichert werden. Mein Problem ist, dass ich keinen Plan habe wie ich besagte Instanz nach der Erstellung in besagter ArrayList speichern soll :rtfm: .
was hast du denn bis jetzt gemacht? Wenn wir dir eine Lösung vorgeben würden, würdest du nicht viel daraus lernen. Also schau mal in die JavaDocs rein und guck dir da die Klasse ArrayList an. Vielleicht hilft dir das ja schonmal weiter
public class SampleClass
{
private static int i = 0; //Zum zählen der erstellten Instanzen
private static ArrayList<SampleClass> array = new ArrayList<SampleClass>(); //Hier sollen die Instanzen gespeichert werden
public SampleClass()
{
array.add(new SampleClass()); //führt zu einem Fehler beim erstellen einer Instanz java.lang.StackOverflowError
i++;
}
/**
* Gibt die Anzahl der erstellten Instanzen zurück
*/
public int getAnzahl()
{
return i;
}
}
public class SampleClass
{
private static int i = 0; //Zum zählen der erstellten Instanzen
private static ArrayList<SampleClass> array = new ArrayList<SampleClass>(); //Hier sollen die Instanzen gespeichert werden
public SampleClass()
{
}
public static void createInstance()
{
array.add(new SampleClass());
i++;
}
/**
* Gibt die Anzahl der erstellten Instanzen zurück
*/
public int getAnzahl()
{
return i;
}
}
Statische ArrayList erstellen, jedes Objekt schon im Konstruktor dieser Liste übergeben
Java:
public class Foo{
public static List<Foo> myList = new ArrayList<>(); // Diamond Operator
public Foo(){
myList.add(this);
}
public static List<Foo> getList() {return myList;}
}
[TIPP]Zudem solltest du eine Collection nicht
Code:
array
nennen, sonst könnte man annehmen es wäre eben ein Array und keine Collection[/TIPP]
[EDIT]mal abgesehen davon hatten wir vorgestern erst einen komplett identischen Thread, warum nicht einfach erstmal suchen anstatt für jede hier schon drölfzig mal exestierende Kleinigkeit ein neuen Post zu eröffnen [/EDIT]
public class SampleClass
{
private static int i = 0; //Zum zählen der erstellten Instanzen
private static ArrayList<SampleClass> array = new ArrayList<SampleClass>(); //Hier sollen die Instanzen gespeichert werden
public SampleClass()
{
array.add(new SampleClass()); //führt zu einem Fehler beim erstellen einer Instanz java.lang.StackOverflowError
i++;
}
}
Also dein Problem ist, dass du im Kontruktor eine neue Instanz erstellst. Blöd ist nur, dass wenn du eine neue Instanz erstellst der Konstruktor erneut aufgerufen wird. Immer und immer wieder und dies führt zum StackOverflow
Die Lösung ist mit Hilfe des Keywords this möglich wie kaoZ schon geschrieben hat
Abgesehen davon sollte die Methode getAnzahl() statisch sein, sonst könnte man von außen meinen die Anzahl i sei eine Instanz-Variable oder du nutzt gleich die Methode size() der ArrayList, die direkt die Anzahl der Elemente in der ArrayList zurückgibt.