No, purtroppo il readObject() da solo non ti può aiutare in questo.
Se puoi usare almeno Java 9 c'è una funzionalità nuovissima che si potrebbe usare: la possibilità di passare un "filter" (ObjectInputFilter) al ObjectInputStream che serve per effettuare una validazione sullo stream. Questa funzionalità è stata introdotta principalmente per proteggersi dagli "attacchi" derivanti da stream fatti ad hoc per "impallare" la de-serializzazione o per altre cose malevole.
In entrambi i modi a) e b) che ho detto, ad un certo punto devi comunque prevedere un cast, che può naturalmente anche fallire (ClassCastException). Ed è un caso che devi considerare perché vorrebbe dire che lo stream è "malformato".
Comunque se scegli la b) la forma del metodo (non guardare il nome, quello lo scegli tu) dovresti farla:
public <T> List<T> deserializeItems(Class<T> aClass)
Quindi se gli passi un class "literal" come Highscore.class (che è di tipo Class<Highscore>) il compilatore dedurrà che il tipo restituito da quella invocazione è un List<Highscore> e quindi puoi assegnare il risultato direttamente ad una variabile List<Highscore> senza alcun cast o altro che non sia type-safe.
P.S. vedo che il file lo prendi da this.fileName, quindi avrai di certo una classe di cui crei una istanza. La type variable <T> la puoi mettere volendo a livello di classe (e il Class lo passeresti al costruttore). Dipende dal "design" che intendi fare ...


Rispondi quotando