2009-11-13 1 views

risposta

25

Legenda - la tua risposta potrebbe essere migliorata; perché se si fallisce numTries volte, si ingerisce l'eccezione. Molto meglio:

while (true) { 
    try { 
    // 
    break; 
    } catch (Exception e) { 
    if (--numTries == 0) throw e; 
    } 
} 
+5

hm if (--numTries == 0) è veramente pericoloso. Cosa succede se è all'inizio 0 o inferiore? Preferirei <1 – hudi

5

Ho visto alcuni approcci ma Io uso il seguente:

int numtries = 3; 
while(numtries-- != 0) 
    try { 
     ... 
     break; 
    } catch(Exception e) { 
     continue; 
    } 
} 

questo potrebbe non essere l'approccio migliore però. Se hai altri suggerimenti, per favore mettili qui.

MODIFICA: un approccio migliore è stato suggerito da oxbow_lakes. Si prega di dare un'occhiata a questo ...

+2

Questo messaggio appartiene al tuo topicstart .. – BalusC

+1

Questo doveva essere uno di quelli che rispondono alla tua domanda :) con la speranza che possa aiutare gli altri ... – Legend

+2

@Legend - Penso che se guardi la mia risposta, tu vedrai che il tuo approccio è imperfetto –

1

Prova aspetto programmazione orientata e @RetryOnFailure annotazione dal jcabi-aspects:

@RetryOnFailure(attempts = 2, delay = 10, verbose = false) 
public String load(URL url) { 
    return url.openConnection().getContent(); 
}