Avatar billede nicklasb Nybegynder
20. januar 2006 - 21:54 Der er 3 kommentarer og
1 løsning

The method addElement(Object) belongs to the raw type Vector

Hej,

Et eksempel på mit "problem" kan beskrives ud fra nedenstående kode.


import java.util.Vector;

public class TextString {
    public Vector users;

    public TextString() {
        this.users = new Vector();
    }
   
    public void addTextString(String user){
        this.users.addElement(user);
    }
}


Ved linien indeholdende "this.users.addElement(user);" kommer mit udviklingsværktøj med en kommentar "Type Safety: The method addElement(Object) belongs to the raw type Vector. References to generic type Vector<E> should be parameterized.".

Den forslår mig at indsætte linien "@SuppressWarnings("unchecked")" over addTextString() -metoden, hvilket dog ikke umeldbart løser problemet, men blot fjerner fejlbeskrivelsen.

Jeg kan dog ikke lige gennemskue hvad "løsningen" er og ved derfor ikke hvordan eller om jeg skal rette fejlen.

Så, hvad betyder fejlen? Og hvordan retter jeg den?
(Koden ovenfor er bare et eksempel - har flere steder en næsten enslydende fejl, de fleste med add-metoder for forskellige klasser.)

På forhånd tak for hjælpen
/Nicklas B.
Avatar billede jakoba Nybegynder
20. januar 2006 - 22:11 #1
Det du får er en advarsel, fordi du ikke benytter Java version 5's mulighed for at fortælle i forvejen hvilken slags objekter du vil putte i din vektor.

Her er det strenge du vil putte i den så du kunne erklære den med
public Vector<String> users;      // Jeg lover jeg kun vil komme String objekter i denne vektor.

du kan også bare ignorere advarslen, fx ved at indsætte den der
  @SuppressWarnings("unchecked");
linie. Det vil man typisk gøre i de situation hvor man ønsker at brokke allemulige forskellige ting ind i en vektor eller arrayliste eller ...

mvh JakobA
Avatar billede jakoba Nybegynder
20. januar 2006 - 22:15 #2
Hvis du vælger at specificere det skal være strenge bør du også ændre linien
        this.users = new Vector();
til
        this.users = new Vector<String>();  //samme løfte en gang til
Avatar billede nicklasb Nybegynder
20. januar 2006 - 22:23 #3
Tusind tak for hjælpen!

Kan egentligt godt huske metoden med initialiseringen af vektoren til at indeholde bestemte typer objekter, men vidste ikke at det var det der skabte den advarsel.

Nu du skriver det er nyt for Java version 5 - vil det så betyde noget rent kompatibilitets-mæssigt for mine applikationer? Altså - hvis skal jeg hellere undlade at initialisere med Vector<type>, hvis jeg vil have programmet til at være bagudkompatibelt? Eller har det ikke noget med det at gøre?

Og igen, tak for hjælpen!
Avatar billede jakoba Nybegynder
21. januar 2006 - 01:03 #4
tak for points.

Dit andet spm kan jeg desværre ikke svare på med sikkerhed, det er lidt gæt, så stol ikke formeget på nedenstående.

1) du får fejl hvis du prøver at kompilere den nye syntax det med en 'gammel' java compiler.

2) JCode har ikke ændret sig, så en ældre VM skulle ikke have problemer med at køre ny kode. (men opdater alligevel for en sikkerheds skyld)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester