Gå til innhold

Syntax spm, hva betyr <...> ?


Anbefalte innlegg

Videoannonse
Annonse

Array<int> noe; vil jeg tro gir en feilmelding i kompilatoren ?

 

og hvis jeg ikke husker helt feil med array tror jeg du skal skrive:

int[] noe; //for så og skrive noe som

noe = new int[tall] //der tall blir byttet ut med størrelsen du vil ha på array'et.

(evt alt på en linje : int[] noe = new int[tall]; )

 

 

int[] noe sier at variabelen "noe" skal være av array av typen int. (liste over heltall)..

 

hvis array<int> noe skulle funke i andre kompilatorer står det for det samme. (array av typen int).

Endret av ZephyroX
Lenke til kommentar

"Array <int> noe" har jeg aldri hørt om heller..

jeg lurer spesielt på hva <...> betyr.

I for eksempel "ArrayList <Integer> noe" deklareres en liste av heltallselementer, og da står <...> for klassen listen "noe" skal være av. Dersom man skriver bare "ArrayList noe" vil man få en listen av typen Object. Dersom man da skal ta ut elementene i "noe" (gjøres ved noe.get(plassnr)), må det objektet som returneres omtypes (castes) til ønsket klasse (for eksempel Integer) før du kan brukes (som i eksempelet et heltall). Dersom man i deklarasjonen og tilordningen har presisert klassen slepper man å omtype elementene.

 

Forresten, dersom man skriver: "ArrayList <Klassenavn> noe;" burde tilordningen skje ved "noe = new ArrayList <Klassenavn> ();" for å få ønsket effekt.

Lenke til kommentar

Takk for infoen. Jeg har det fra boken Java in a Nutshell 5th ed. Det var brukt men fant ikke forklaring på det i oppslaget der. Og det er riktig at det ikke var int eller array, men:

 

Set<String> wordset = new HashSet<String>();

 

Hva er fordeler og ulemper med å gjøre dette versus å caste typer rent teknisk sett? Har det noen minne-allokerings fordeler? Eller er det bare det at man slipper å skrive unødig kode dersom man vet at man kun skal bruke den bestemte typen. Andre ting som er verdt å tenke på av det som skjer bak kulissene?

 

edit:typo

Endret av grimjoey
Lenke til kommentar

Du skal bruke den parametriserte typen av Set, List m.m.

 

Det er bare fordeler med å bruke generiske typer. For eksempel hvis man ønsker å ha en mengde med ord, bruker man som du skrev Set<String>. Dette er fordi da kan man hente ut elementer fra mengden og utføre String-metoder på de objektene uten å måtte teste om det faktisk er en String. Du vet også da at du aldri legger noe inn i mengden som ikke er en String.

 

Merk at Java ikke skiller mellom de forskjellige parametriserte typene under runtime, det er kun under kompilering den er forskjellig. Under runtime er det den «råe» typen (raw type) etter type erasing.

Lenke til kommentar
  • 2 uker senere...

Set = ett Set som kan ta alle typer objekter

Set<String> = set som kun kan inneholde String-objekter

Set<Integer> = set som kun kan inneholde Integer-objekter

Set<Bil> = et set som inneholder biler

 

som pgd nevner: man bør alltid angi generisk type.

 

pass på å ha med generisk type også ved opprettelse av obj:

ArrayList<String> minFineListe = new ArrayList<String>();

Lenke til kommentar

Fordelen er at du får compile-time sjekking av koden din og at koden blir mer forståelig.

 

Det er mye lettere å forstå:

 

Set<String> myStringSet;

 

enn

Set mySetThatShouldOnlyContainStrings; //remember only put strings in this collection!

 

Du får også compiletime feil hvis du prøver:

 

myStringSet.add(new Object());

 

mens

 

mySetThatShouldOnlyContainStrings.add(new Object());

 

er helt lovlig compiletime, men hvis du prøver å bruke mySetThatShouldOnlyContainStrings :

String thisShouldHaveBeenAString = (String)mySetThatShouldOnlyContainStrings.iterator().next();

 

vil du kunne få en ClassCastException - og det muligens på ett helt annet sted enn feilen opprinnelig ble gjort...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...