Mehrere versch. Objekte zurückgeben



  • Hi zusammen,

    Folgendes:
    Ich habe eine Klasse Container und eine Klasse Item.
    Ein Container kann Items enthalten aber auch Container.

    So habe ich das Ganze zusammen gesteckt:
    Container c1;
    Container c2;
    Item i1;
    Item i2;
    c1.add(i1);
    c2.add(i2);
    c1.add(c2); //<- Container in Container

    ich habe zur Zeit 2 Arten einer Funktion die mir die Inhalte liefern:
    - getContentItems()
    - getContentContainers();

    Das heisst um heraus zufinden was zum Beispiel in c1 liegt muss ich 2 Funktionen bemühen. Schön wäre aber eine einzige Funktion ( getContent() ).

    Hat jemand eine Idee wie ich das realisieren könnte? Das Problem ist eigentlich das Entschlüssen in einer anderen Klasse die nicht weiss was sie da für Objekt-Arten kriegt...

    Vielen Dank



  • wenn ich das richtig verstanden habe, hast du eine baumstruktur auf die du 'flach' zugreifen willst? man könnte ja zu dem zweck eine methode basteln, die einen temporären container erzeugt und die baumstruktur nach 'containern' absucht (mit instanceof) und die referenzen dann in den temporären container einfügt und den dann zurückgibt...



  • Hi!

    Uhm... eine Baumstruktur? Ich glaube nicht...?
    Ich will nicht rekursiv durch alles durch, sondern nur den Inhalt des gewählten Containers.

    Im Endeffekt sowas wie ein Array
    Array a = c1.getContents();
    a[0] = i1(Typ: Item-Objekt) )
    a[1] = c2(Typ: Container-Objekt) )

    Das Problem ist wenn ich einen Array zurückgebe verliere ich die Information um was für ein Obj. es sich handelt (da es nur noch Typ Object ist, nicht mehr Item oder Container).
    Und einen typisierten Array (od. ArrayListe) kann ich auch nicht machen, da ich dann immer noch nicht weiss was für ein Objekt da drin liegt.
    Und somit kann ich nicht mehr auf die "speziellen" Funktionen der einzelnen Objekte zugreifen, weil ich nicht weiss wie ich die casten soll...



  • noobie schrieb:

    Das Problem ist wenn ich einen Array zurückgebe verliere ich die Information um was für ein Obj. es sich handelt

    da wär' ich mir nicht so sicher. immerhin kann java ja 'instanceof' und es gibt ja noch die reflection api...



  • Okay, ich werde mir das mal anschauen (reflection und instanceof) und hoffe natürlich das ich vorwärts komme 🙂

    Vielen Dank!



  • Wenn Container von Item abgeleitet ist, vereinfacht sich die Sache:

    void getItems(List<Item> items)
    List<Item> getItems();

    liefern alle Blätter des Container-Baumes zurück

    class Item
    {
      void getItems(List<Item> items)
      {
        items.add(this);
      }
    
      final List<Item> getItems()
      {
        List<Item> l = new ArrayList<Item>();
        getItems(l);
        return l;
      }
    }
    
    class Container extends Item
    {
      List<Item> itemList;
    
      void getItems(List<Item> items)
      {
        for (Item item : itemList)
        {
          item.getItems(items);
        }
      }
    }
    

    Mir ist allerdings nicht ganz klar, was du genau möchtest.


Anmelden zum Antworten