Announcement

Collapse
No announcement yet.

LinkedList/Collection

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • LinkedList/Collection

    Guten Tag zusammen

    Ich habe folgendes Problem:

    Ich habe eine Klasse erstellt. Die speichere ich als Instanz
    in der Lista ab. Dies funktioniert prima. Leider kann ich nicht
    auf die Instanz zugreifen. Die Methode get(Index) schlug fehl!
    Siehe Quelltext.

    Weiss jemand wie auf meine abgespeicherte Instanz zugreifen kann, so dass
    ich damit arbeiten kann.

    Gruss Dany

    public void x()
    {
    int i = 0;
    for(i = 0; i < llist.size();i++)
    try
    {??? llist.get(i);
    }
    catch(Exception ex)
    {}

    }

    PS. Entschuldigung wenn Diskussion mehrmals verschickt wurde

  • #2
    Hallo Dany,

    Welche Exception wird denn geworfen?
    Welche Methode benutzt du um das Objekt in der Liste abzulegen?

    Gruss

    Thoma

    Comment


    • #3
      Hoi Thomas

      Ich benutze die add-methode.

      Bspl.
      //Klasse welche instanziert wird und abgelegt werden soll
      Cls cl = new Cls();
      LinkedList lnk = new LinkedList();
      lnk.add(cl);

      Das Zugreifen auf die Instanz funktioniert nicht, weil ich nicht weiss
      wie ich die Instanz zuweisen muss.

      Cls = lnk.get(Index);
      funktioniert nicht!

      Gruss Dan

      Comment


      • #4
        Hallo Sarah,

        die Zuweisung funktioniert aus zwei Gründen nicht:

        1. Du benötigst eine Variable des Typs:
        Cls = lnk.get(Index);//falsch
        Cls cl = lnk.get(Index);//richtig

        2.
        Da die Liste (wie alle anderen in java.util) "nur" Objekte vom Typ Object aufnehmen kann, wird die Zuweisung
        Cls cl = lnk.get(Index);
        so auch nicht funktionieren.

        Um ein Objekt des Typs Cls zurückzubekommen, musst du einen sogenannten Typecast durchführen. Das heisst das zurückgelieferte Objekt vom Typ Object muss in den Typ Cls umgewandelt werden.
        Dazu setzt du einfach den Typ der get() Anweisung in Klammern voraus:

        Cls cl = (Cls) lnk.get(Index);

        jetzt kannst du mit dem Objekt arbeiten wie gewohnt.

        ACHTUNG:
        Wenn der gelieferte Typ nicht in den gewünschten Typ gecastet werden kann, dann wird eine ClassCastException
        geworfen.
        Beispiel:
        Cls cl = (String) lnk.get(Index);

        Wenn du in die Liste Objekte unterschiedlichen Typs ablegst, dann kann obiges natürlich auch passieren:
        Cls cl = new Cls();
        TomType tt = new TomType();

        lnk.add(cl);
        lnk.add(tt);

        tt = (TomType) lnk.get(0);//An Position 0 befindet sich cl !!!

        Ich kenne bisher nur einen Fall wo unterschiedliche Typen in der selben Liste gehalten werden. Mir behagt das nicht so recht.
        Sollte es dennoch keine andere Möglichkeit geben Objekte getrennt nach Typ abzulegen, dann kannst du das Objekt auch "fragen"
        von Welchem Typ es ist (Fortführung des obigen Beispiels):

        Object o = lnk.get(0);
        if (o instanceof TomType)
        tt = (TomType)o;

        Zunächst holt man das Objekt mit get() ab. Da standardmässig immer Object zurückgegeben wird, ist kein Cast notwendig.
        Der instanceof Operator liefert einen Booleschen Wert zurück. In Wortform:
        Wenn o eine Instanz von TomType ist, dann caste o auf TomType und weise es tt zu.

        Guten Rutsch

        Thoma

        Comment


        • #5
          Danke Thomas

          Ich werde es gerade ausprobiere!
          Dir wünsche ich natürlich auch ein gutes neues Jahr.

          Gruss Sara

          Comment

          Working...
          X