Umwandlung von Array in Vector und umgekehrt

Mehadorz

Mitglied
Hallo zusammen,

ich möchte eine Klasse schreiben, welche einen Vector in ein Array umwandelt und umgekehrt, dass ganze mit generisch mit Typsicherheit.

Ich hab bisher folgenden Code geschrieben:

Java:
public class VectorArrayConverter<T>
{
    public Vector arrayToVector(T array)
    {
        return new Vector<T>(Arrays.asList(array));
    }

    public T[] vectorToArray(Vector<T> vector)
    {

        return (T[])vector.toArray();
    }
}

Grundsätzlich funktioniert das auch, aber irgendwie ist das nicht Typensicher. Wenn ich das ganze mit
Java:
VectorArrayConverter tausche = new VectorArrayConverter<Integer>();
initializiere kann ich trotzdem String tauschen. Wo liegt mein Denkfehler?
 
oh man...stimmt...:autsch:

so, kann mir jetzt noch jemand erklären warum

Java:
    public T[] vectorToArray(Vector<T> vector)
    {

        return (T[])vector.toArray();
    }

nicht funktioniert?

Bekomme da einen Fehler java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
 
Zuletzt bearbeitet:
Arrays von Typparametern erstellen ist schwierig (und man könnte so pauschal sagen: Das geht nicht). Es gibt workarounds...

Java:
import java.util.*;


public class VectorArrayConverter<T>
{
    public static void main(String args[])
    {

        Vector<Integer> v = new Vector<Integer>();
        v.add(1);
        v.add(2);
        v.add(3);

        Integer a[] = VectorArrayConverter.vectorToArray(v, Integer.class);

        System.out.println(Arrays.toString(a));
    }

    public static <T> Vector<T> arrayToVector(T[] array)
    {
        return new Vector<T>(Arrays.asList(array));
    }

    @SuppressWarnings("unchecked")
    public static <T> T[] vectorToArray(Vector<T> vector, Class<T> c)
    {
        return (T[])vector.toArray((T[])java.lang.reflect.Array.newInstance(c, vector.size()));
    }
}

BTW: Diese beiden Methoden machen dann im Endeffekt nicht viel anderes als Arrays.asList und vector.toArray - überleg' mal, ob die wirklich so sinnvoll sind...
 
Verweise denjenigen, der die Aufgabe gestellt hat, mal auf diesen Beitrag hier:


Hallo, Aufgabensteller. Fällt dir nichts sinnvolleres ein? Vector sollte in keiner Schnittstelle auftauchen, stattdessen sollte man gegen Interfaces (hier: List) programmieren. Arrays von Typparametern sind frickelig und meistens sinnlos, und lernen tut man dabei auch nichts.
 

Zurück
Oben