Wo Java doch Generics kann, sollte man diese doch auch nutzen. Aber irgendwie scheint die Umsetzung ein bisschen Pfusch zu sein...
Also ich will in der Superklasse eine generische Funktion haben, damit ich das nicht in jeder Subklasse selbst implementieren muss. Diese Funktion konvertiert mir eine Liste in ein Generic Array (da sind dann aber natürlich noch ein paar andere Funktionen drin). Jedenfalls war das die Idee:
import java.util.List;
public class Manager<E> {
public Manager() {
}
protected E[] convertListToArray( List list ) {
E retVal[] = new E[list.size()];
for ( int l = 0; l < list.size(); l++ ) {
retVal[l] = (E)list.get( l );
}
return retVal;
}
}
Alles anzeigen
Und jetzt würde ich mir davon einfach ein paar Klassen bauen, die das verwenden, also z.B. "public class AddressManager extends Manager<Address>"
Allerdings kompiliert mir die Manager Klasse nicht, weil "Cannot create generic array of E" sowie "The cast from Object to E is actually checking against the erased type Object". Aha. Warum?!?
Außerdem würd ich auch gerne meine PersistenceManager Abfragen generalisieren, also
public E[] getList() {
Query query = em.createQuery( "SELECT c FROM " + E.class.getName() + " AS c" );
List resultList = query.getResultList();
return convertListToArray( resultList );
}
Allerdings will er ein E.class.getName() auch nicht "Illegal class literal for the type of parameter E".
Irgendwelche Vorschläge wie ich Java trotzdem dazu bringen kann meinen Code zu fressen (bzw. mir viel Copy&Paste zu ersparen)?