2013-03-04 86 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調用,而且成本更高。