该工具只是对Guava中Retryer拙劣的模仿。意在学习其Java8使用方式,代码解耦精髓。
package com.fast.cattsoft.util;
import java.util.concurrent.ExecutionException;
public interface RetryResult<V> {
boolean hasResult();
boolean hasException();
V getResult() throws IllegalAccessException;
V get() throws ExecutionException;
Throwable getException();
int getRetryCount();
}
package com.fast.cattsoft.util;
public class SuccessRetryResult<R> implements RetryResult<R> {
private R result;
private int tryCount;
private long intervaTime;
public SuccessRetryResult(R result, int tryCount, long intervaTime) {
this.result = result;
this.tryCount = tryCount;
this.intervaTime = intervaTime;
}
@Override
public boolean hasResult() {
return true;
}
@Override
public boolean hasException() {
return false;
}
@Override
public R getResult() {
return result;
}
@Override
public R get() {
return result;
}
@Override
public Throwable getException() {
return null;
}
@Override
public int getRetryCount() {
return 0;
}
}
package com.fast.cattsoft.util;
import java.util.concurrent.ExecutionException;
public class ExceptionRetryResult<R> implements RetryResult<R> {
private ExecutionException e;
private int tryCount;
private long intervaTime;
ExceptionRetryResult(ExecutionException e, int tryCount, long intervaTime) {
this.e = e;
this.tryCount = tryCount;
this.intervaTime = intervaTime;
}
@Override
public boolean hasResult() {
return false;
}
@Overr