webForumDet fria alternativet

Konvertera vector till en array av specifik klass

4 svar · 597 visningar · startad av Gein

GeinMedlem sedan sep. 20005 700 inlägg
#1

Luddig rubrik kanske.
Jag har en Vector v där alla element är av klassen c. Kan jag på något sätt få ut en array av dessa element som är av klassen c?

v.toArray() returnerar ju bara en array Object[].

Alltså, i de fall c = Integer.class så vill jag ha en Integer[].
c varierar!

spangoMedlem sedan juni 20008 205 inlägg
#2

Du kan använda v.toArray(new Integer[v.size()]). Går att göra även om den inte är deklarerade som Vector<Integer>, även om du säkert får lite varningar av det.

GeinMedlem sedan sep. 20005 700 inlägg
#3

Jag vill inte göra "new Integer" då jag vill hålla det generellt. Jag vill isåfall använda Integer.class men lyckas inte skapa en array utifrån Integer-kassen.

GeinMedlem sedan sep. 20005 700 inlägg
#4

Grävde fram en lösning men den använder Reflection och är kanske inte helt optimalt. Det blir generellt men jag har förstått att man inte ska använda Reflections i onödan.

import java.lang.reflect.Array;

// Förutsätt en Vector v innehållande objekt av klassen c

Object myArray = Array.newInstance(c, v.size());
v.toArray((Object[])o);

Tar gärna emot en lösning (om den öht existerar, jag tror inte det) utan reflect. Tills dess markerar jag tråden ändå som löst.

LimeMedlem sedan sep. 2001961 inlägg
#5

Rent tekniskt är det exakt det som händer när du använder dig av den generiska varianten av Vector. Om du deklarerar Vector<Integer> så kommer toArray() att returnera en Integer[]. Det som händer är att toArray anropar just den koden du har skrivit men även konverterar den till en Integer[].

Du bör inte "gissa" vad det är för typ av objekt som du får från en vector. Då är det bättre att skapa flera getter-metoder som returnerar olika saker, t.ex. en som returnerar Number[], en som returnerar Double[] och en som returnerar Integer[] och beroende på vad du vill göra med det du får ut, så får du anropa rätt metod.

128 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)