Sto cercando un modo per ottenere la logica di riprovare un'operazione in un unico metodo mantenendo i tipi di eccezione dell'operazione.
I.e., l'implementazione per riprovare un'operazione potrebbe essere simile a questa:
public void retriedOperation(Operable operable, int maxAttempts) throws Exception {
for (int attempt = 0; attempt < maxAttempts; attempt++) {
try {
operable.doOperation();
break;
} catch (Exception e) {
if (attempt + 1 > maxAttempts) {
throw e;
}
}
}
}
Questa implementazione è tuttavia in grado solo di generare un Exception
non specificato e quindi di perdere molte informazioni.
Sfortunatamente, le eccezioni generiche possono
public void <ExceptionType extends Exception> retriedOperation(...) throws ExceptionType { ... }
consentirebbe solo di catturare un'eccezione non specifica, controllare se è del tipo giusto e poi lanciarlo. Ma se è di un altro tipo, non può essere lanciato con questa intestazione del metodo.
Esiste un modo per implementare una funzione di ripetizione generica che conserva eccezioni specifiche?