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();
}