grimjoey Skrevet 4. juni 2007 Del Skrevet 4. juni 2007 gjør disse det samme? Array<int> noe; int noe[]; kan noen forklare litt rundt dette? jeg lurer spesielt på hva <...> betyr. Lenke til kommentar
ZephyroX Skrevet 4. juni 2007 Del Skrevet 4. juni 2007 (endret) 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 4. juni 2007 av ZephyroX Lenke til kommentar
gunnard Skrevet 4. juni 2007 Del Skrevet 4. juni 2007 "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
pgdx Skrevet 4. juni 2007 Del Skrevet 4. juni 2007 Du ønsker kanskje å lese om Generiske typer (PDF) Lenke til kommentar
grimjoey Skrevet 4. juni 2007 Forfatter Del Skrevet 4. juni 2007 (endret) 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 4. juni 2007 av grimjoey Lenke til kommentar
pgdx Skrevet 4. juni 2007 Del Skrevet 4. juni 2007 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
qualbeen Skrevet 17. juni 2007 Del Skrevet 17. juni 2007 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
blackbrrd Skrevet 20. juni 2007 Del Skrevet 20. juni 2007 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå