Krampf mit Java Syntax

  • Hallo Community

    ich kämpfe zur Zeit mit Java (wieder einmal ^^). Folgender Code bereitet mir schwierigkeiten:

    Code
    Object o1 = myFWR.readFile("userData.NORM");
            if(o1 instanceof Vector<UserData>) {
                users = (Vector<UserData>) o1;
            } else {
                users = new Vector<UserData>();
            }


    myFWR ist einfach nur eine Klasse mit der ich aus Dateien Objekte auslese.
    users ist vom Typ Vector<UserData>

    Jetzt kommt folgende Fehlermeldung:



    Die erste Nachricht sagt ja im Prinzip einfach nur, dass ich nur Vector ohne <...> nehmen kann. Mein Problem ist aber, dass ich irgendwie versuche diese unchecked Warnung wegzubekommen (ohne jetzt supressWarnings zu nehmen).
    Jetzt denke ich mir mal, dass wenn myFWR automatisch schon einen Vector<UserData> ausspuckt, zumindest diese zwei Probleme wegfallen. Aber dann verschieb ich diese Warnung im Prinzip ja nur in myFWR. Da nehme ich aber von einem ObjectInputStream die Methode readObject(). Wie kann ich hier denn nun die Cast Warnung verschwinden lassen?


    Vielen Dank im Vorraus

    Nicholas


    EDIT: Achso, myFWR sollte natürlich trotzdem so bleiben, dass es vielseitig eingesetzt werden kann. Kann ich da auch mit <...> arbeiten???

  • Falls du wissenwolltest, ob du eine klasse "typenfrei" schreiben kannst, ja das geht...
    sollte so ca hinhaun:

    Code
    public class Test<T>
    {
    private T t;
    public Test(T t)
    {
    this.t=t;
    }
    }

    ich komm nicht ganz drauf, was du mit dem instanceOf bei dem Vector bezwecken willst?

    Und nein , Vector ohne <...> wird nicht funktionieren, weil dann wär er typenlos (?)

    Thomas

  • Generics verhalten siche bei solchen Details in Java oft nicht so wie man es erwarten würde... ^^

    Hier gibt es eine ausführliche Erklärung dazu, insbesondere unter dem Punkt "Unchecked Casts" steht, was in solchen Fällen zu tun ist. Die Warnung wird man daher nicht wegbekommen.

    Auf dein Problem übertragen dürfte es wahrscheinlich so funktionieren:

    Code
    Object o1 = myFWR.readFile("userData.NORM");
    if(o1 instanceof Vector) {
        users = (Vector<UserData>) o1;
    } else {
        users = new Vector<UserData>();
    }

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!