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".
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.


Rispondi quotando