Non ci siamo. Tra l'altro ti consiglio di separare la logica "generica" di parsing del JSON dalla tua logica applicativa specifica (il fatto che se il file non esiste la lista la consideri vuota è una tua logica applicativa).
Quindi una cosa tipo:
codice:
// .... gli import ....
public class JsonIO {
private Gson gson;
public JsonIO() {
gson = new Gson();
}
public <T> List<T> readArray(File file, Class<T> type) throws FileNotFoundException, IOException {
ArrayList<T> list = new ArrayList<T>();
JsonParser parser = new JsonParser();
try (BufferedReader bf = new BufferedReader(new FileReader(file))) {
JsonArray jsonArray = parser.parse(new JsonReader(bf)).getAsJsonArray();
for (JsonElement jsonElement : jsonArray) {
T element = gson.fromJson(jsonElement, type);
list.add(element);
}
}
return list;
}
}
Poi nella classe base dei frame:
codice:
private JsonIO jsonIO;
protected <T> List<T> readAllItems(String fileJson, Class<T> type) throws FileNotFoundException, IOException {
File file = new File(fileJson);
List<T> list;
if (file.exists()) {
list = jsonIO.readArray(file, type);
} else {
list = new ArrayList<T>(0);
}
return list;
}
E infine in ciascuna classe specifica, banalmente:
codice:
list = readAllItems(UrlAndPath.JSON_AUTORI, Author.class);
Molto buttato lì, eh. Devi anche valutare bene tutte le eccezioni possibili, dove/come gestirle ecc...