/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Warning ved typecast
Fra : Jens Peter Rosenkvis~


Dato : 01-10-06 23:57

Jeg har følgende kode:

ArrayList<Integer> a = new ArrayList<Integer>();
ArrayList<Integer> b = new ArrayList<Integer>();

b = (ArrayList<Integer>)a.clone();

Når jeg compiler det, giver det en warning ([unchecked] unchecked cast),
når jeg cloner. Det skyldes, at clone returnerer et Object.

Hvis jeg ikke typecaster det, giver det en fejl.

Hvad kan jeg gøre for at undgå fejlen?
Altså ændre i koden, ikke undertrykke warnings.

--
Why do fireflies die so soon?
http://www.jensercube.dk/sig.asp

 
 
Johnnie Hougaard Nie~ (02-10-2006)
Kommentar
Fra : Johnnie Hougaard Nie~


Dato : 02-10-06 00:34

Jens Peter Rosenkvist wrote:
> ArrayList<Integer> a = new ArrayList<Integer>();
> ArrayList<Integer> b = new ArrayList<Integer>();
>
> b = (ArrayList<Integer>)a.clone();
>
> Når jeg compiler det, giver det en warning ([unchecked] unchecked cast),
> når jeg cloner. Det skyldes, at clone returnerer et Object.

Problemet er at da generics type informationen ikke er tilgængelige på
runtime tidspunktet, kan det ikke lade sig gøre for ArrayList.clone at
lave andet end en ArrayList<Object>

En mulighed for at slippe for den warning som derfor fremkommer er at lave
en egen subtype, hvor den generic type er "gemt væk". Så vil clone() jo pr
definition returnere subtypen, og det er compileren så tilfreds med.....

public class MyList extends ArrayList<Integer>
{
private static final long serialVersionUID = 1L ;
public MyList()
{
super() ;
}
}

Martin Rytter (21-10-2006)
Kommentar
Fra : Martin Rytter


Dato : 21-10-06 15:49

Hej

> ArrayList<Integer> a = new ArrayList<Integer>();
> ArrayList<Integer> b = new ArrayList<Integer>();
>
> b = (ArrayList<Integer>)a.clone();

Hvis ikke jeg husker meget forkert kan du:

ArrayList<Integer> a = new ArrayList<Integer>();
ArrayList<Integer> b = new ArrayList<Integer>(a);

På den måde kan du lave en kopi på typesikker vis :)

/mrj


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste