让我们解决本书第 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接口定义了一个逻辑类型,可以检查并用于特定目的,例如运输计算,确保只考虑物理产品。
结论
这两个项目通过提供有关如何以及何时正确使用界面的指导来相辅相成。前提是接口应该用于定义有意义的类型和清晰的契约,无论是通过定义行为的方法还是作为以逻辑和有用的方式对类进行分类的标记。
以上是对物品和书本的反思的详细内容。更多信息请关注PHP中文网其他相关文章!