Verschiedene Objekte in einer Liste speichern

Diskutiere Verschiedene Objekte in einer Liste speichern im Java Basics - Anfänger-Themen Bereich.
C

Caliburns

Hallo,

angenommen ich habe zwei Klassen, hier mal zwei Beispiele (dienen nur zur Verdeutlichung):

Java:
public GameStone(int iD, String colour) {
      this.iD = iD;
      this.colour = colour;
}
public position(int x, int y) {
      this.x = x;
      this.y= y;
}
Nun möchte ich eine ArrayList erstellen, die Objekte aus BEIDEN Klassen beinhalten kann. Grundsätzlich habe ich schon gesehen, dass es über List<Object> = new ArrayList..... möglich wäre. Diese Lösung möchte ich aber, wenn möglich vermeiden.

Ich habe schon eine weile darüber nachgedacht, im Notfall würde ich versuchen bestimmte Klassen zusammenzulegen, was kein Problem wäre, aber die Trennung wäre mir lieber.

Mein Ansatz wäre evtl. eine neue Klasse zu erstellen die beide Objekte enthält, aber wie das dann in eine Liste gepackt werden kann, die dann auch geschlossen aufgerufen werden kann, weiß ich nicht...

Vielen Dank für die Hilfe!
 
H

httpdigest

Wenn beide Klassen (mal abstrakt gesprochen) `A` und `B` keine gemeinsame Schnittstelle haben (außer java.lang.Object), dann ist `List<Object>` genauso gut wie jede andere Lösung. Denn, wenn du die Objekte wieder aus der Liste ausliest, musst du sowieso einen Check auf den Laufzeittyp des Objektes machen, da du ja nicht vorher weisst, ob das nun ein `A` oder ein `B` ist. Und wenn du es wüsstest, musst du sowieso einen Cast anwenden. Du kannst dir natürlich eine eigene Listen-Abstraktion schreiben, mit Überladungen von add(A) und add(B), um typsicher entweder A oder B hinzuzufügen und intern eine List<Object> halten.
Generell halte ich es aber für nicht sinnvoll, in einer Liste sowohl `A` als auch `B` zu speichern, wenn beide nichts miteinander zu tun haben. Da ist dann die Problemdomäne eher suboptimal modelliert.
 
C

Caliburns

Wenn beide Klassen (mal abstrakt gesprochen) `A` und `B` keine gemeinsame Schnittstelle haben (außer java.lang.Object), dann ist `List<Object>` genauso gut wie jede andere Lösung. Denn, wenn du die Objekte wieder aus der Liste ausliest, musst du sowieso einen Check auf den Laufzeittyp des Objektes machen, da du ja nicht vorher weisst, ob das nun ein `A` oder ein `B` ist. Und wenn du es wüsstest, musst du sowieso einen Cast anwenden.
Generell halte ich es aber für nicht sinnvoll, in einer Liste sowohl `A` als auch `B` zu speichern, wenn beide nichts miteinander zu tun haben. Da ist dann die Problemdomäne eher suboptimal modelliert.
Wenn ich das Objekt caste, wäre das nicht dann so etwas wie die instanceOf Methode? Das ist konkret die Funktion die ich vermeiden will, dass es ja als kein guter Programmierstil gilt.

Der Hintergrund ist eine Lastzug-Modellierung an den verschiedene Anhänger angehängt werden können. Diese Liste Möchte ich später quasi als "kompletten Lastzug" inkl. Anhänger interpretieren. Meine Klassen sind eben der Lastzug und verscheiene Anhänger jeweils in einer Klasse.
 
H

httpdigest

Dann würde ich erstmal fragen, welche Vorteile es dir bringt, bzw. welchen Anwendungsfall es abdeckt, dass du eine Liste hast, in der sowohl der eine Lastzug als auch `seine Anhänger enthalten sind?
 
C

Caliburns

Man könnte bestimme Anhänger löschen, hinzufügen, hätte einen einfachen Zugriff auf die Länge des Lastzuges.
Welche Modellierung würdest du vorschlagen um dies abzubilden? Die einzelnen Anhänger vielleicht in eine Klasse packen?
 
H

httpdigest

Speichere nur die Anhänger in der Liste und den Lastzug einzeln.
Java:
class LastzugMitAnhaengern {
  Lastzug lastzug;
  List<Anhaenger> anhaenger;
}
Man könnte bestimme Anhänger löschen, hinzufügen, hätte einen einfachen Zugriff auf die Länge des Lastzuges.
Das beantwortet nicht die Frage, warum du in der Liste sowohl den Lastzug als auch die Anhänger speicherst.
 
Thema: 

Verschiedene Objekte in einer Liste speichern

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben