我在hamcrest Matcher界面库中遇到了这些注释。
由Stevefreeman和Nat Pryce编码
Matcher实现应不要直接实现此接口。 *相反,扩展 {@link BaseMatcher}抽象类, *可以确保Matcher API可以支持 *新功能,并与所有Matcher实现兼容。
与直接实现匹配器的专用类相比,实现匹配器接口的抽象类(即BaseMatcher)具有什么优势?如果有人可以举例说明会有所帮助。我想了解做框架样式代码的最佳实践,所以我很好奇我应该知道什么时候应该遵循这种模式,因为我在Spring中也看到类似的样式。
答案 0 :(得分:0)
比方说,Hamcrest设计师决定在Matcher界面中添加新方法。
直接实现Matcher的所有类将不再编译。
但是,如果他们改为扩展抽象BaseMatcher类,则设计人员可以在BaseMatcher中添加新方法的默认实现,并且所有现有子类仍然可以编译。
请注意,从Java 8开始,它们还可以直接在接口中添加默认实现。但是Hamcrest创建于Java 8之前。