在构造函数中使用lambda创建抽象类或实现?

时间:2017-02-02 17:22:40

标签: java lambda abstract-class

我注意到函数现在有一个替代解决方案,以前只有抽象类/接口才有意义。

例如:

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;
    }
}

我倾向于后一种解决方案,因为它不会强制用户创建子类。还有其他的利弊吗?

0 个答案:

没有答案