Arraylist<Object> mit verschiedenen Objects ausgeben

Spiderpic98

Mitglied
Ich möchte für mein kleines Textadventure ein Inventar erstellen,welches in einer ArrayList gespeichert wird.
Diese ArrayList möchte ich in der Konsole ausgeben. Das Problem ist, ich kann nicht die get-Methoden aus den Klassen verwenden,
weil ich ja nicht die get Methoden von zum Beispiel eines Trankes für die get-Methoden einer Waffe benutzen kann. Zumindest wüsste ich nicht wie.
Und ich wüsste auch nicht wie ich während der for Schleife mir ausgeben sollte von welcher Klasse das Objekt ist, um zu sagen welche Methoden
ich nutzen kann.

Mein erster Ansatz war

Java:
public static void main(String[] args) {



        ArrayList<Object> inventar = new ArrayList();

        KleinerTrank ktrank = new KleinerTrank(KleinerTrank.stärke,KleinerTrank.anzahl);

        inventar.add(ktrank);



        for (int i = 0; i <= inventar.size(); i++) {

            System.out.println(inventar.get(i));

        }

    }

Allerdings bekomme ich nur die Speicheradresse.

Hat jemand vielleicht eine Idee?
 
Zum einen ist es fraglich, ob es eine gute Idee ist, eine ArrayList zu erstellen, die beliebige Objekte erwartet:
Java:
ArrayList<Object> inventar
Dass du nur einen cryptischen Code ("die Speicheradresse") ausgegeben bekommst, kannst du verhindern, indem du die toString()-Methode überschreibst. In dieser Methode kannst du dann auch auf die Member der Klasse (die get-Methoden) zugreifen, also
Java:
public class KleinerTrank {
  // dein Code
  public String toString() {
    String s = ""; // hier alles hereinschreiben, was interessant ist
    retrurn s;
  }
}
 
Ganz nebenbei: Das "kryptische" ist nicht die Speicheradresse sondern der Hashcode. Das ist zwar bei Object in der Regel tatsächlich die Adresse (Das ist ein Implementierungsdetail, das nicht zwingend der Fall sein muss laut Dokumentation im Source Code). Und spätestens bei abgeleiteten Klassen, die hashcode überschreiben, ist dies nicht mehr der Fall.

Gäbe es denn eine bessere Alternative?
Ja, denn in das Inventar können ja nur Gegenstände des Spieles getan werden. Daher können Deine Klassen die Gegenstände und so darstellen, von einer übergeordneten Klasse abgeleitet werden. Oder Du hast ein Interface a.la. "Tragbar", wovon alles abgeleitet wurde, das ins Inventar aufgenommen werden kann.
Somit hättest Du dann eine ArrayList<Tragbar> oder ArrayList<Spielgegenstand> oder so.
 

Zurück
Oben