让我们解决本书第 22 条和第 41 条之间明显的矛盾:
第 22 条:“如果你不想定义类型,就不要使用接口。”
此项建议您不应将接口用于不代表真实类型或具体功能的事物。例如,仅使用接口来存储常量并不是一个好的做法。接口应用于定义类应实现的契约或行为。
第 41 条:“如果你确实想定义一个类型,请使用接口。”
本项目讨论使用接口,特别是标记接口,来定义一种类型,以可以在编译时检查的方式对类进行分类或标记。标记接口不定义方法,但它仍然定义一个逻辑类型,可用于在编译时检查类的行为。
核对项目
理解这两项的关键是定义有用类型和适当使用接口之间的区别。
第 22 条规定,避免对没有特定功能或行为的事物使用接口。这个想法是应该使用接口来定义类必须遵循的明确契约。
当您想要定义一个类型来为特定目的对类进行分类或标记并且可用于编译时检查时,第 41 条建议使用接口(包括标记)。
实际应用
第 22 项:避免这样:
public interface Constants { String SOME_CONSTANT = "value"; int ANOTHER_CONSTANT = 42; }
这并不定义类型或行为;它只是一个常量容器,这是对接口的错误使用。
第 41 条:使用接口来标记类型:
public interface PhysicalProduct { // Interface marcadora sem métodos } public class Book implements PhysicalProduct { // Implementação da classe que indica que é um produto físico }
这里,PhysicalProduct接口定义了一个逻辑类型,可以检查并用于特定目的,例如运输计算,确保只考虑物理产品。
结论
这两个项目通过提供有关如何以及何时正确使用界面的指导来相辅相成。前提是接口应该用于定义有意义的类型和清晰的契约,无论是通过定义行为的方法还是作为以逻辑和有用的方式对类进行分类的标记。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3