ok, adesso ho capito bene cosa indetevi per metodo generico!
ero partito in quarta con i generics senza ragionarci meglio sopra!
codice:
@FXML
private void esporta(ActionEvent ev) {
Object obj = ev.getSource();
List<Nota> list = null;
try {
list = db.getAll();
} catch (SQLException ex) {
GenericDialog.showDialog("Errore database: " + ex.getMessage(), Alert.AlertType.WARNING);
}
if (list != null) {
if (obj == miJson) {
eseguiEsporta(list, tblCaption, "Esporta JSON", new FileChooser.ExtensionFilter("JSON (*.json)", "*.json"), this::esportaNoteInJson);
} else if (obj == miXls) {
} else if (obj == miCsv) {
} else if (obj == miXml) {
}
}
}
public void eseguiEsporta(List<Nota> list, String[] header, String titolo, FileChooser.ExtensionFilter filter, DoExport doExport) {
Optional<File> f = dc.saveFile(getStage().getOwner(), titolo, filter);
if (f.isPresent()) {
try {
doExport.export(f.get(), list, header);
GenericDialog.showDialog("Database esportato!", Alert.AlertType.INFORMATION);
} catch (Exception ex) {
GenericDialog.showDialog(ex.getMessage(), Alert.AlertType.WARNING);
}
}
}
private void esportaNoteInJson(File file, List<Nota> list, String[] header) throws Exception {
JsonDb ex = new JsonDb();
ex.create(file.getAbsolutePath(), list);
}
private void esportaNoteInXml(File file, List<Nota> list, String[] header) throws Exception {
XmlDb ex = new XmlDb();
ex.create(file.getAbsolutePath(), list);
}
private void esportaNoteInCsv(File file, List<Nota> list, String[] header) throws Exception {
CsvDb ex = new CsvDb();
ex.create(file.getAbsolutePath(), header, list);
}
private void esportaNoteInXls(File file, List<Nota> list, String[] header) throws Exception {
ExcelDb ex = new ExcelDb();
ex.create(file.getAbsolutePath(), header, list);
}
per quanto riguarda le f.i., devo ancora capire bene, perchè il tuo esempio è molto diverso da quelli che ho visto in giro.
cmq mi pare di capire che creando i metodi con la stessa "forma" del metodo della f.i., posso usare questo "modo":
infatti, anche dove non necessario, hai aggiunto il parametro String[] header (ad esempio nella esportazione in json).
tanto più che, se lo levo, mi da errore.
più o meno corretto??