Ich habe eine generische Klasse, die eine Collection in ein Array umwandeln soll:

Code:
public abstract class Manager<E> {
    public E[] toArray( Collection<E> collection ) {
        @SuppressWarnings( "unchecked" )
        E retVal[] = (E[]) new Object[collection.size()];
        int i = 0;
        for ( Iterator<E> it = collection.iterator(); it.hasNext(); i++ ) {
            retVal[i] = it.next();
        }
        return retVal;
    }
}
wenn ich jetzt eine klasse daraus ableite und toArray verwende, erhalte ich eine ClassCastException (die exakte Quelle ist nicht wirklich lokalisierbar, ist ein JBoss):
Code:
public class Usermanager extends Manager<User>
Wenn ich die toArray Methode aber in den Usermanager kopiere funktioniert alles wunderbar:
Code:
    public User[] toArray( Collection<User> collection ) {
        @SuppressWarnings( "unchecked" )
        User retVal[] = new User[collection.size()];
        int i = 0;
        for ( Iterator<User> it = collection.iterator(); it.hasNext(); i++ ) {
            retVal[i] = it.next();
        }
        return retVal;
    }
Woran könnte das liegen? In der generischen Klasse muss ich leider von Object auf E casten, weil erasure das so will. Laut Bruce Eckel sollte das auch so funktionieren (und in einer kleinen Minidemo hat das bei mir auch keine Probleme gemacht).

Irgendeine Idee woran das liegen könnte? Ich würde es gerne vermeiden die Funktion in allen nichtgenerischen Klassen neu zu implementieren...