拥有一个对其所有方法都具有默认实现的接口是一种好习惯吗?

时间:2020-08-19 07:27:43

标签: java java-8 interface

想象一下,我有一个如下所示的界面:

public interface DataChecker<T, C> {

    default ProcessResult beforeProcess(T record, CountertHelper countertHelper, C config){
        return new ProcessResult(false, Collections.emptyList());
    }

    default List<String> checkData(T record, CountertHelper countertHelper, C config) {
        return Collections.emptyList();
    }

    @RequiredArgsConstructor
    @Getter
    class ProcessResult {
        private final boolean skip;
        private final List<String> keys;

        public ProcessResult(boolean skip) {
            this.skip = skip;
            this.keys = Collections.emptyList();
        }
    }
} 

此接口的某些实现者可能仅实现beforProcess方法,而另一些实现者可能仅实现checkData方法,而另一些实现者可能选择同时实现这两种方法。

同时制作两个default是一个好习惯吗?或更笼统地说,拥有一个接口,该接口的所有方法都具有default实现。

1 个答案:

答案 0 :(得分:1)

顾名思义,java 8中的 default 方法是简单默认。如果不重写它们,则它们是调用者类将调用的方法。

在这种情况下,如果Some类仅需要beforProcess而又不希望checkData,反之亦然,建议您将ur接口拆分为2

喜欢

public interface DataChecker<T, C> {

     List<String> checkData(T record, CountertHelper countertHelper, C config);

public interface DataProcessor<T, C> {

     ProcessResult beforeProcess(T record, CountertHelper countertHelper, C config);

现在,这种方法更加简洁,如果同时执行这两个类,则这些类将覆盖其中的一个或两个,因此更加简洁。