JDK中定義的空接口
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.rmi.Remote;
import java.util.RandomAccess;
個人理解爲:空接口僅做標記使用,無其他含義
Spring中也有大量空接口 列出部分如下:
public interface SpringProxy {}
public interface RawTargetAccess {}
public interface ThrowsAdvice extends AfterAdvice {}
public interface AfterAdvice extends Advice {}
public interface BeforeAdvice extends Advice {}
開發控件時,常常會遇到一些需要繼承的接口,但卻不需要實現什麼方法,因爲這個接口是空的。
接口只包含只有方法,屬性,索引器(有參屬性),事件四種成員。接口可以提供一組行爲和契約,當繼承一個接口時,你需要實現實現接口內的方法。
沒有方法的接口,卻也可能有屬性,索引器,事件。
這裏不討論我們在開發的時候是否需要使用空接口。我只想討論一下,這些空接口是如何起作用的。
空接口的作用一般情況下就是標誌性,也就是實現了這種接口的都是表示他們都是某種類型的class,就像Serializable,他表示實現了該接口的類型都是可以被持久化和可以做傳輸的。這是一種能力的象徵。INamingContainer就是其中的典型。
同樣在控件開發中,有的接口的實現方法僅僅從代碼上看似乎並不合邏輯。
比如常用的:IPostBackDataHandler接口
這個接口中有兩個方法bool LoadPostData();void RaisePostDataChangedEvent();
LoadPostData()用來判斷數據是否發生改變,返回值爲bool。但你一般是看不到有代碼去調用RaisePostDataChangedEvent();
因爲這部分的工作是框架來完成的。
所以我們猜想在繼承類空的接口後,雖然你所能看到代碼上並沒有什麼改變,但相對於框架來說這個繼承空接口的類被賦予了某些特性。
在運行和使用的時候,框架會幫我們做很多我們看不到的事情。