Java 注释能完全取代标记接口吗?

Java 注释能完全取代标记接口吗?,java,annotations,marker-interfaces,Java,Annotations,Marker Interfaces,由于标记接口主要用于标记一个类,同样的事情也可以通过注释实现。例如,Cloneable接口可以是@Cloneable 那么,是否仍然需要标记接口,或者可以通过注释重新调整间距?使用它们有什么优点/缺点吗?我的意思是更喜欢一个而不是另一个?标记接口在用于定义类型时优于注释。例如,Serializable可以(并且应该)用作必须可序列化的参数类型。批注不允许这样做: public void writeToFile(Serializable object); 如果标记接口不定义类型,而只定义元数据,

由于标记接口主要用于标记一个类,同样的事情也可以通过注释实现。例如,
Cloneable
接口可以是
@Cloneable


那么,是否仍然需要标记接口,或者可以通过注释重新调整间距?使用它们有什么优点/缺点吗?我的意思是更喜欢一个而不是另一个?

标记接口在用于定义类型时优于注释。例如,Serializable可以(并且应该)用作必须可序列化的参数类型。批注不允许这样做:

public void writeToFile(Serializable object);

如果标记接口不定义类型,而只定义元数据,那么注释更好。

还有一件事需要提及,那就是使用注释的成本。要检查对象是否是接口的实例,可以使用
instanceof
,这是目前成本相对较低的操作。使用注释需要
Java反射
调用,而且成本要高得多。

标记接口甚至在泛型之前就被建立为反模式。@MarkoTopolnik以前元数据需要标记接口,但现在可以使用注释来实现。这就是为什么它被称为反模式,对吗?是的,而且即使在Java1.4上,也有关于设计无标记接口的建议。标记接口是对多态性概念的滥用。是否有可能重复对其进行评论?