我注意到函数现在有一个替代解决方案,以前只有抽象类/接口才有意义。
例如:
public abstract class AbstractFallbackStrategy {
public boolean shouldDoFallback(Exception e, Result r) {
if (isException()) return true;
if (isEmptyResult()) return true;
if (isInvalidResult(r)) return true;
return false;
}
protected abstract boolean isInvalidResult(Result r);
}
或者,现在可以写:
public class FallbackStrategy {
private final Function<Result, Boolean> validResultClassifier;
public FallbackStategy(Function<Result, Boolean> validResultClassifier) {
this.validResultClassifer = validResultClassifier;
}
public boolean shouldDoFallback(Exception e, Result r) {
if (isException()) return true;
if (isEmptyResult()) return true;
if (validResultClassifier.apply(r)) return true;
return false;
}
}
我倾向于后一种解决方案,因为它不会强制用户创建子类。还有其他的利弊吗?