2013-03-04 34 views
5

由于标记接口主要用于标记类,通过注释可以实现同样的功能。例如Cloneable接口可以是@Cloneable注释可以完全替代标记界面吗?

那么是否仍然需要标记接口或者可以通过注释进行替换?使用它们中的任何一个是否有优势/劣势?我的意思是比其他更喜欢一个?

+1

甚至在泛型之前,标记界面被建立为反模式。 – 2013-03-04 11:40:07

+0

@MarkoTopolnik以前的标记界面是元数据需要的,但现在可以使用注释实现相同的功能。这就是为什么它被称为反模式,我是对的吗? – 2013-03-04 11:45:18

+0

是的,再加上即使在Java 1.4上也有建议设计时没有标记界面。标记接口是对多态的概念的滥用。 – 2013-03-04 12:25:20

回答

3

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

public void writeToFile(Serializable object); 

如果标记接口没有定义类型,但只有元数据,然后注释是更好的。

1

还有一点要提到的是使用注释的成本。要检查对象是否是一个接口的实例,可以使用instanceof,这是一种成本相对较低的操作。使用注释需要Java reflection调用,而且成本更高。