代码实现:Hamcrest Matcher接口和BaseMatcher抽象类

时间:2018-08-11 11:59:42

标签: spring interface abstract-class hamcrest

我在hamcrest Matcher界面库中遇到了这些注释。

由Stevefreeman和Nat Pryce编码


Matcher实现应不要直接实现此接口。  *相反,扩展 {@link BaseMatcher}抽象类,  *可以确保Matcher API可以支持  *新功能,并与所有Matcher实现兼容。


与直接实现匹配器的专用类相比,实现匹配器接口的抽象类(即BaseMatcher)具有什么优势?如果有人可以举例说明会有所帮助。我想了解做框架样式代码的最佳实践,所以我很好奇我应该知道什么时候应该遵循这种模式,因为我在Spring中也看到类似的样式。

1 个答案:

答案 0 :(得分:0)

比方说,Hamcrest设计师决定在Matcher界面中添加新方法。

直接实现Matcher的所有类将不再编译。

但是,如果他们改为扩展抽象BaseMatcher类,则设计人员可以在BaseMatcher中添加新方法的默认实现,并且所有现有子类仍然可以编译。

请注意,从Java 8开始,它们还可以直接在接口中添加默认实现。但是Hamcrest创建于Java 8之前。