cn.niuable.utils.TryKit Maven / Gradle / Ivy
package cn.niuable.utils;
/**
* 尝试某个操作
* @author 王维
*
*
* www.51xlxy.com
* 2018-05-23
* [email protected]
* All rights Reserved, Designed By WangWei
*
*/
public class TryKit {
/**
* 尝试容器
* @param 自定义返回值类型
*/
public abstract static class BaseTry {
/**
* 执行方法
* @return 自定义返回值
*/
public abstract T run();
}
/**
* 开始尝试操作
* @param doTry 尝试操作对象
* @param millis 尝试失败后进行下一次尝试的间隔时间
* @param maxRetry 最大尝试次数
* @param 自定义返回值类型
* @return 自定义返回值
*/
public static T start(BaseTry doTry, long millis, int maxRetry) {
if (maxRetry < 1){
throw new IllegalArgumentException("尝试次数错误");
}
maxRetry--;
try {
return doTry.run();
} catch (Exception e) {
//没有尝试次数,则抛出异常
if(maxRetry < 1){
throw new RuntimeException(e);
}
try {
if (millis > 0) {
Thread.sleep(millis);
}
return start(doTry, millis, maxRetry);
} catch (InterruptedException e1) {
throw new RuntimeException(e1);
}
}
}
/**
* 开始尝试操作
* @param doTry 尝试操作对象
* @param millis 尝试失败后进行下一次尝试的间隔时间
* 默认尝试3次
* @param 自定义返回值类型
* @return 自定义返回值
*/
public static T start(BaseTry doTry, long millis) {
return start(doTry, millis, 3);
}
/**
*
* 开始尝试操作
* @param doTry 尝试操作对象
* @param maxRetry 最大尝试次数
* 默认立即进行下一次尝试
* @param 自定义返回值类型
* @return 自定义返回值
*/
public static T start(BaseTry doTry, int maxRetry) {
return start(doTry, 0, maxRetry);
}
}