Quote Originariamente inviata da Mirco993 Visualizza il messaggio
Finchè utilizzo una classe concreta (es. "Highscore"), non ho problemi
Alt. Se list è di tipo List<Highscore>

allora la riga

list.add(ostream.readObject());

NON ti compila proprio! Perché readObject restituisce Object e con una lista parametrizzata Highscore, è il compilatore che NON accetta di passare un Object dove è richiesto un Highscore.

Dovresti mettere un cast:

list.add((Highscore) ostream.readObject());

allora sì, compila. Ma il cast "potrebbe" fallire a runtime. Se nello stream in input c'è un oggetto che non supera il test IS-A Highscore, il cast fallisce. Ma ovviamente è un caso di errore che devi considerare perché vuol dire che lo stream è "malformato".

Quote Originariamente inviata da Mirco993 Visualizza il messaggio
ma se utilizzo un generico, il compilatore mi chiede (giustamente) un cast...
Se il metodo è "generico" ovvero invece di restituire un List<Highscore> ha una type variable <T> e restituisce un List<T>, allora hai almeno due opzioni:

a) Al metodo fai ricevere una interface Java che ha 1 metodo che "sa" come "mappare" (nel senso di verificare/castare) un oggetto da Object a T (quello che sarà poi parametrizzato nell'uso concreto).

b) Al metodo fai ricevere un java.lang.Class che viene usato dal metodo come type "token". E userai il cast(Object) del Class che è sostanzialmente l'equivalente ma "dinamico" del cast statico che si scrive fisso nel codice.