webForumDet fria alternativet

Konvertera vector till en array av specifik klass

Java

4 svar · 599 visningar · startad av Gein

Medlem sedan sep. 20005 700 inlägg
Frågan#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!

Medlem 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.

Medlem 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.

Medlem 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.

Medlem 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.

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)