想象一下,我有一个如下所示的界面:
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
实现。
答案 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);
现在,这种方法更加简洁,如果同时执行这两个类,则这些类将覆盖其中的一个或两个,因此更加简洁。