Nach Lehrbuch sollte die Methode getSomeContent() bereits wissen, vom welchen Listen-Typ die Rückgabe ist. Dies kann man entweder dadurch erreichen, dass die Klasse dieser Methode einen Typparameter <T extends BaseA> besitzt, oder die Methode selbst, wenn sie statisch ist.
Also in der Art:
abstract class Provider<T extends BaseA> { abstract List<T> getSomeContent(); }
Hi, erstmal setzt das natürlich voraus, das Deine baseAList nur Elemente vom Typ detailBList enthält. Wenn das sichergestellt ist, dann ergibt sich zwangsläufig die Frage warum die Methode getSomeContent() nicht gleich eine Liste dieses Typs zurückgibt. Aber davon mal abgesehen ist der schnellste weg (weil ohne umkopieren) der unten gezeigte. Einfach eine Liste ohne Typisierung als "zwischenspeicher" nutzen.
List<BaseA> blist = new ArrayList<BaseA>(); // getSomeContent(); List tmp = blist; List<DetailB> dlist = tmp;
(Das ist natürlich auch nicht schön, weil die Typsicherheit nicht garantiert wird. Zur Laufzeit kannst Du eine ClassCastException bekommen, wenn in der blist doch andere Elemente waren als welche vom Typ DetailB)