Typverlust bei Java-Listen

Von: , 28.12.2011 18:39 Uhr

Hi Leute,
ich habe ein Problem:
Ich versuche ein Java-Programm zu schreiben, in dem eine Liste vorkommt. In dieser Liste sind jetzt 50 Elemente von einem Typ. Diese Elemente muss ich später nochmal benutzen, wenn ich sie aber aufrufe, haben sie ihre typenspezifischen Dienste verloren.

(Beispiel: Ich habe Elemente vom selbsterstellten Typ "Skispringer". Zurückgegeben werden sie mir aber als Elemente des Typs "Object". Daher haben sie die Dienste, die mein Skispringer hat verloren.)

Weiß vielleicht jemand, wie ich dieses Problem lösen kann?

Gruß und Dank im Voraus
Daniel

13 Antworten zu dieser Frage

  1. Antwort von nach 19 Minuten 0 hilfreich
    Re: Typverlust bei Java-Listen

    Hi..
    Du musst wahrscheinlich die Objekte zurück casten.

    ((Skispringer) obj).getSki();

    oder so ähnlich.
    Die Liste sollte ebenfalls schon typisiert angelegt werden.

    • Antwort von nach einer Stunde 0 hilfreich
      Re^2: Typverlust bei Java-Listen

      Danke erstmal für die schnelle Antwort. Wie legt man denn eine typisierte Liste an? Das ist mir nämlich neu...

      Gruß
      Daniel

      • Antwort von nach einer Stunde 0 hilfreich
        Re^3: Typverlust bei Java-Listen

        Ein Beispiel mit ArrayList
        Die Klasse ArrayList<E> implementiert das Interface List<E>. Ich vermute, Du hast auch eine Klasse gewählt, die das Interface List implementiert.

        Skifahrer skifahrer1 = new Skifahrer();

        ArrayList<Skifahrer> skifahrerListe = new ArrayList<Skifahrer>();

        skiFahrerListe.add(skifahrer);


        [ irgendwann später ]

        Skifahrer ersterSkifahrer = (Skifahrer) skiFahrerListe.get(0);

        Das sollte eigentlich zu einer

        • Antwort von nach einer Stunde 0 hilfreich
          Re^4: Typverlust bei Java-Listen

          Ah, alles klar!
          Ich danke dir vielmals!

          Gruß
          Daniel

  2. Antwort von nach einer Stunde 0 hilfreich
    Re: Typverlust bei Java-Listen

    Hast Du die Liste auch "Typisiert"?
    Also wenn Du sowas hier probierst:

    ArrayList<String> l = new ArrayList<String>();
    String name = "Bob";
    l.add(name);
    System.out.println(l.get(0).charAt(1)); // prints "o"

    Dann klappt das eigentlich. Oder habe ich Deine Frage falsch verstanden. Hast Du irgendwo Code zum zeigen??
    Oder hast Du die Liste selbst geschrieben? Vielleicht ist da einfach statt des generischen Typs nur Object als return-Wert.
    Naja, schwer ohne code. Sorry...
    Hoffe, es hilft Dir trotzdem.

    • Antwort von nach 22 Stunden 0 hilfreich
      Re^2: Typverlust bei Java-Listen

      Ist völlig richtig, das ganze läuft jetzt - danke!
      Gruß
      Daniel

  3. Antwort von nach 2 Stunden 0 hilfreich
    Re: Typverlust bei Java-Listen

    Hallo, Ich versuche ein Java-Programm zu schreiben, in dem eine Liste
    vorkommt.
    Was für eine Liste? List ist ein Interface, wie implementierst du oder benutzt du eine von den Klassen, die das bereits implementiert haben (siehe Link)?
    http://docs.oracle.com/javase/6/docs/api/java/util/L... In dieser Liste sind jetzt 50 Elemente von einem
    Typ. Diese Elemente muss ich später nochmal benutzen, wenn ich
    sie aber aufrufe, haben sie ihre typenspezifischen Dienste
    verloren.
    Wie erzeugst du deine Liste? Eine ArrayList wäre wie folgt anzulegen:
    ArrayList<Skispringer> myList = new ArrayList<Skispringer>();

    Jede Liste speichert halt Objekte. Wenn du nicht sagst, welcher Typ, dann ist das Objekt als Obermutter aller zuständig.

    Falls das nicht hilft, bitte Code schicken.

    • Antwort von nach 2 Stunden 0 hilfreich
      Re: Typverlust bei Java-Listen

      Hallo Daniel,

      eine Möglichkeit ist zu versuchen es um zu casten:

      Skispringer temp = (Skispringer) liste.get(0);

      Gruß Steffen

  4. Antwort von nach 2 Stunden 0 hilfreich
    Re: Typverlust bei Java-Listen

    Hi Daniel.

    Du hast zwei Möglichkeiten:

    1) Du verwendest eine generische Liste (siehe auch Generics) und zwar wie folgt:
    <code>
    ArrayList<Skispringer> listeVonSkispringern = new ArrayList<Skispringer>();
    //ganz viel deines Codes
    Skispringer springer = listeVonSkispringern.get(0);
    </code>

    2) Du "weißt" das nur Skispringer in der Liste sind und castest (von engl. to cast) einfach:
    <code>
    ArrayList auchEineListeVonSkispringern = new ArrayList();
    //ganz viel deines Codes
    Skispringer auchEinSpringer = (Skispringer) auchEineListeVonSkispringern.get(0);
    </code>


    Viele Grüße,

    Thomas aka. Daniel ;)

      • Antwort von nach 3 Stunden 0 hilfreich
        Re: Typverlust bei Java-Listen

        Hallo,
        leider kenn ich mich in Java nur so gut aus, wie wir es in der Schule lernen. Da wir noch nie Listen behandelt haben fällt mein Wissen diesbezüglich eher mäßig aus :) Aber soweit ich weiß kann man Listen einen bestimmten Typ zuweisen, in deinem Fall z.B.:
        List<Skispringer> DeineListe = new ArrayList<Skispringer>();

        Dafür auch ein Link: http://www.exampledepot.com/egs/java.util/coll_Creat...

        Mehr kann ich dir aber leider auch nicht helfen...

        Gruß
        SPN

    • Antwort von nach 15 Stunden 0 hilfreich
      Re: Typverlust bei Java-Listen

      Hej,

      es gibt wahrscheinlich mehrere Möglichkeiten, dein Problem zu lösen:

      1. Generics:

      List<Skispringer>jumpers=new ArrayList<Skispringer>();
      //befüllen
      Skispringer jumper1=jumpers.get(0);
      


      2. Casten von Object auf Skispringer:

      List list=new ArrayList();
      //etc
      Skispringer jumper=(Skispringer)list.get(0);
      

      Besser sind Generics (siehe auch hier)

      Gruß Mobbmaster

      • Antwort von nach 7 Tagen 0 hilfreich
        Re: Typverlust bei Java-Listen

        Hallo Daniel,

        kannst Du vielleicht den Src-Code posten?

      • Antwort von nach 7 Tagen 0 hilfreich
        Re^2: Typverlust bei Java-Listen

        Danke für deine Antwort, aber ich habe bereits eine Lösung erhalten.
        Gruß
        Daniel
        Hallo Daniel,

        kannst Du vielleicht den Src-Code posten?

        Jetzt auf diese Frage antworten.