/ 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
hvordan typecaster man fra Object[] til fx~
Fra : Thomas Krog


Dato : 30-01-01 20:39

det kan da ikke passe at man kun kan typecaste element vis?
(sådan en simpel operation skal da kunne løses i konstant tid)

kan man eventuelt løse det med Array klassen eller måske med Class klassen?



 
 
Ulrik Magnusson (30-01-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 30-01-01 20:56

Thomas Krog wrote:

> det kan da ikke passe at man kun kan typecaste element vis?
> (sådan en simpel operation skal da kunne løses i konstant tid)

Jeg ved ikke, om jeg misforstår spørgsmålet, men du kan da cast'e array'et:

Object[] oar = new String[]{"Hello"};
String[] sar = (String[])oar;
sar[0] += ", World.";
System.out.println(sar[0]);

Ulrik Magnusson

--
"Less we love and know how we're just morter filling holes"
Skinny Puppy - 'Morter', The Process 1996
Visit my home page: http://www.geocities.com/ulrikm



Morten Jensen (31-01-2001)
Kommentar
Fra : Morten Jensen


Dato : 31-01-01 12:37

Ulrik Magnusson wrote:

> Thomas Krog wrote:
>
>> det kan da ikke passe at man kun kan typecaste element vis?
>> (sådan en simpel operation skal da kunne løses i konstant tid)
>
> Jeg ved ikke, om jeg misforstår spørgsmålet, men du kan da cast'e array'et:
>
> Object[] oar = new String[]{"Hello"};
> String[] sar = (String[])oar;
> sar[0] += ", World.";
> System.out.println(sar[0]);

Jeg tror nærmere, Thomas efterlyser denne funktionalitet:

Object[] oar = new Object[2];
oar[0] = "Hello";
oar[1] = ", World.";
String[] sar = (String[]) oar;

Og det kan man ganske rigtigt ikke, selvom oar kun indeholder String
objekter.

--
Morten Jensen


Ulrik Magnusson (31-01-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 31-01-01 15:16

Morten Jensen wrote:

> Jeg tror nærmere, Thomas efterlyser denne funktionalitet:
> Object[] oar = new Object[2];
> oar[0] = "Hello";
> oar[1] = ", World.";
> String[] sar = (String[]) oar;
> Og det kan man ganske rigtigt ikke, selvom oar kun indeholder String
> objekter.

Hvorfor ikke?

Ulrik Magnusson


--
"Less we love and know how we're just morter filling holes"
Skinny Puppy - 'Morter', The Process 1996
Visit my home page: http://www.geocities.com/ulrikm



Ulrik Magnusson (31-01-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 31-01-01 15:46

Ulrik Magnusson wrote:

> Morten Jensen wrote:
>
> > Jeg tror nærmere, Thomas efterlyser denne funktionalitet:
> > Object[] oar = new Object[2];
> > oar[0] = "Hello";
> > oar[1] = ", World.";
> > String[] sar = (String[]) oar;
> > Og det kan man ganske rigtigt ikke, selvom oar kun indeholder String
> > objekter.
> Hvorfor ikke?

Ok, fordi Object[] ikke er superklasse til String[] - jeg holder bare
kæft..
Er dette urimeligt? (at en datastruktur ikke kan tilpasse sine omgivelser
(læs: type) efter
dets tilstand)

Ulrik Magnusson

> --
> "Less we love and know how we're just morter filling holes"
> Skinny Puppy - 'Morter', The Process 1996
> Visit my home page: http://www.geocities.com/ulrikm




--
"Less we love and know how we're just morter filling holes"
Skinny Puppy - 'Morter', The Process 1996
Visit my home page: http://www.geocities.com/ulrikm



Morten Jensen (01-02-2001)
Kommentar
Fra : Morten Jensen


Dato : 01-02-01 12:08

Ulrik Magnusson wrote:

> Ulrik Magnusson wrote:

>> Morten Jensen wrote:
>>

>>> Jeg tror nærmere, Thomas efterlyser denne funktionalitet:
>>> Object[] oar = new Object[2];
>>> oar[0] = "Hello";
>>> oar[1] = ", World.";
>>> String[] sar = (String[]) oar;
>>> Og det kan man ganske rigtigt ikke, selvom oar kun indeholder String
>>> objekter.
>>
>> Hvorfor ikke?
>
> Ok, fordi Object[] ikke er superklasse til String[] - jeg holder bare
> kæft..
> Er dette urimeligt? (at en datastruktur ikke kan tilpasse sine omgivelser
> (læs: type) efter dets tilstand)

Overhovedet ikke. Selvom det ofte kunne være rart, så kunne man
forestille sig alle mulige mærkelige problemer, hvis den gjorde det.

Der er desværre ingen vej udenom at lave et nyt array af den rigtige
type og så kopiere elementerne (bør iøvrigt gøres med System.arraycopy).

--
CAPUT A/S Morten Jensen Phone +45 70 12 24 42
Nygade 6 Senior Developer Fax +45 70 11 24 42
DK-1164 Kbh K jensen@caput.com http://www.caput.com


Morten Nedertoft (01-02-2001)
Kommentar
Fra : Morten Nedertoft


Dato : 01-02-01 12:22

Morten Jensen wrote:

> Der er desværre ingen vej udenom at lave et nyt array af den rigtige
> type og så kopiere elementerne (bør iøvrigt gøres med System.arraycopy).

Sjovt nok saa laeste jeg fornyeligt, at System.arraycopy er langsommere
end selv at kopiere via en for-loekke.
Ikke at jeg ville undlade at bruge arraycopy af den grund, men pudsigt
er det da.

mvh. Morten N

Morten Jensen (01-02-2001)
Kommentar
Fra : Morten Jensen


Dato : 01-02-01 14:09

Morten Nedertoft wrote:

> Morten Jensen wrote:
>
>> Der er desværre ingen vej udenom at lave et nyt array af den rigtige
>> type og så kopiere elementerne (bør iøvrigt gøres med System.arraycopy).
>
>
> Sjovt nok saa laeste jeg fornyeligt, at System.arraycopy er langsommere
> end selv at kopiere via en for-loekke.
> Ikke at jeg ville undlade at bruge arraycopy af den grund, men pudsigt
> er det da.

Det synes jeg også, så jeg lavede lige hurtigt en lille testklasse for
at undersøge det. Den opretter et array med længden args[0], fylder det
med (forskellige) String objekter og kopierer den vha. et for(;;) loop
og bagefter vha. System.arraycopy.

Resultaterne blev som følger:

Arraystørrelse: 800
for(;;) : 0ms
arraycopy : 0ms

Arraystørrelse: 10000
for(;;) : 8-9ms
arraycopy : 0-1ms

Arraystørrelse: 100000
for(;;) : 90-120ms
arraycopy : 7-8ms

Så konklusionen må være, at sålænge det ikke er de helt vilde
datamængder man smider rundt med, så kan det næsten være ligemeget,
hvilken metode man bruger, men så snart vi er oppe og snakke om store
arrays, så kan System.arraycopy helt klart betale sig.

--
CAPUT A/S Morten Jensen Phone +45 70 12 24 42
Nygade 6 Senior Developer Fax +45 70 11 24 42
DK-1164 Kbh K jensen@caput.com http://www.caput.com


Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste