Il punto è che
new TypeToken<List<Author>>() {}
ovvero una estensione con anonymous inner class è il modo per avere a RUNTIME la rappresentazione completa della parametrizzazione, ovvero in quel caso List<Author>
Se fai
new TypeToken<List<T>>() {}
quella rappresentazione completa viene a mancare, ovvero Gson non può certo "capire" che vuoi una lista di Author
Le soluzioni ci sono, sicuramente anche più di una. Una che mi viene in mente:
- classe astratta
codice:public abstract class ControllerAuthorEditor<T> { // ..... protected abstract TypeToken<List<T>> getToken(); // lo usi da initialize() }
- sottoclasse concreta es.
codice:public class ControllerAuthor extends ControllerAuthorEditor<Author> { protected TypeToken<List<Author>> getToken() { return new TypeToken<List<Author>>() {}; } }
(idem per Editor)
Ovvero, detto in generale, "specializzare" solo la costruzione del TypeToken.

Rispondi quotando