Java: Как бы я написал блок try-catch-repeat?
Я знаю о методе счетчика, чтобы сделать это. Мне было интересно, есть ли хороший и компактный способ сделать это.
Ответы
Ответ 1
Легенда - ваш ответ может быть улучшен; потому что, если вы терпите неудачу numTries
раз, вы проглатываете исключение. Гораздо лучше:
while (true) {
try {
//
break;
} catch (Exception e ) {
if (--numTries == 0) throw e;
}
}
Ответ 2
Я видел несколько подходов, но я использую следующее:
int numtries = 3;
while(numtries-- != 0)
try {
...
break;
} catch(Exception e) {
continue;
}
}
Это может быть не самый лучший подход. Если у вас есть другие предложения, пожалуйста, разместите их здесь.
РЕДАКТИРОВАТЬ: лучший способ был предложен oxbow_lakes. Пожалуйста, взгляните на это...
Ответ 3
если вы уже используете Spring, вам может понадобиться создать аспект для этого поведения, поскольку это сквозная проблема, и все, что вам нужно создать, - это pointcut, который соответствует всем вашим методам, которые нуждаются в функциональности. см. http://static.springsource.org/spring/docs/2.5.x/reference/aop.html#aop-ataspectj-example
Ответ 4
Попробуйте аспектно-ориентированное программирование и @RetryOnFailure
аннотация из jcabi-aspects:
@RetryOnFailure(attempts = 2, delay = 10, verbose = false)
public String load(URL url) {
return url.openConnection().getContent();
}