Java通过函数式接口写出一个重试逻辑的类
时间: 2024-05-05 08:19:22 浏览: 16
好的,关于您的问题,可以通过以下方式实现一个重试逻辑的类:
```java
public class RetryLogic {
public <T> T retry(Supplier<T> operation, int maxAttempts, long delay) throws Exception {
Exception lastException = null;
for (int i = 0; i < maxAttempts; i++) {
try {
return operation.get();
} catch (Exception e) {
lastException = e;
Thread.sleep(delay);
}
}
throw lastException;
}
}
```
这段代码通过函数式接口 `Supplier<T>` 接收一个需要执行的操作,然后在操作失败时进行多次重试。`maxAttempts` 控制最大重试次数,`delay` 控制每次重试之间的时间间隔,单位为毫秒。
您可以通过创建一个 `RetryLogic` 对象然后调用 `retry` 方法来使用这个类,例如:
```java
RetryLogic retryLogic = new RetryLogic();
Supplier<String> operation = () -> {
// 在这里执行需要重试的操作,然后返回结果
return "result";
};
try {
String result = retryLogic.retry(operation, 3, 1000);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
```
这样就可以在需要重试的代码块中使用 Lambda 表达式来执行操作了。如果操作失败,`retry` 方法会多次进行重试,直到达到最大重试次数或者操作成功为止。如果操作始终失败,`retry` 方法会抛出最后一次重试的异常。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![CHM](https://img-home.csdnimg.cn/images/20210720083646.png)
![chm](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)