【问题标题】:Java: How would I write a try-catch-repeat block?Java:我将如何编写一个 try-catch-repeat 块?
【发布时间】:2010-12-16 10:24:38
【问题描述】:

我知道有一种反方法可以做到这一点。我想知道是否有一种很好且紧凑的方法可以做到这一点。

【问题讨论】:

  • 请发表您自己的尝试。
  • 有没有办法将其表达为流?

标签: java exception exception-handling try-catch


【解决方案1】:

jcabi-aspects尝试面向方面的编程和@RetryOnFailure注解:

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

【讨论】:

    【解决方案2】:

    传奇 - 您的答案可以改进;因为如果你失败了numTries 次,你就会吞下异常。好多了:

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

    【讨论】:

    • hm if (--numTries == 0) 真的很危险。如果它在 start 0 或更低怎么办?我更喜欢
    【解决方案3】:

    我见过一些方法,但我使用以下方法:

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

    但这可能不是最好的方法。如果您有任何其他建议,请在此处提出。

    编辑:oxbow_lakes 提出了一种更好的方法。请看那个...

    【讨论】:

    • 这是回答您自己的问题的人之一 :) 希望它能帮助其他人...
    • @Legend - 我想如果你看看我的回答,你会发现你的方法有缺陷
    • 更新了我的帖子...感谢您的意见 :)
    【解决方案4】:

    如果您已经在使用 Spring,您可能希望为此行为创建一个切面,因为它是一个横切关注点,您需要创建的只是一个切入点,该切入点与您需要该功能的所有方法相匹配。见http://static.springsource.org/spring/docs/2.5.x/reference/aop.html#aop-ataspectj-example

    【讨论】:

      猜你喜欢
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      相关资源
      最近更新 更多