抽象类与标记接口:
标记界面没有任何问题,并且有一些用例。在这两者之间进行选择,标记界面具有更大的灵活性。
如果您确实要定义类型,请使用接口。
抽象类的目的是提供一个适当的超类,其他类可以从该超类继承并共享一个共同的设计——您的类没有共同的设计,也没有什么可共享的。此外,如果您将来需要为它们添加真正不同的父母,您将把它们都坚持一些受限制的设计,并且不会那么灵活。
抽象类的用例列表:
接口用例:
不相关的类将实现您的接口。
指定特定数据类型的行为,而不考虑谁实现其行为。
多重继承的优势。
所有列出的参数都是用于接口的。由于BrokerResponse
它本身是抽象的,并且有自己的层次结构,因此这些类没有共同点的事实更加强大。
作为替代方案,您可以使用标记注释。我会考虑坚持这两种方法之一,而不是抽象类。
标记界面与标记注释:
根据 Joshua Bloch 的“ Effective java ”:
与标记注释相比,标记接口有两个优点。首先,标记接口定义了由标记类的实例实现的类型;标记注释没有。如果使用标记注释,这种类型的存在允许您在编译时捕获到运行时才能捕获的错误。标记接口相对于标记注释的另一个优点是可以更精确地定位它们。
什么时候应该使用标记注释?
如果标记适用于类或接口以外的任何程序元素,则必须使用注释,因为只有类和接口才能实现或扩展接口。
什么时候应该使用标记界面?
问自己一个问题,我是否想编写一个或多个只接受具有此标记的对象的方法?如果是这样,您应该优先使用标记界面而不是注释。这将使您可以将接口用作相关方法的参数类型,这将带来编译时类型检查的真正好处。
概括:
如果您想定义一个没有任何新方法与之关联的类型,那么标记接口是可行的方法。
如果您想标记除类和接口之外的程序元素,以允许将来向标记添加更多信息,或者将标记适合已经大量使用注释类型的框架,那么标记注释是正确的选择。