定義類型有兩種方式:
一種是注解,這個之前已經提到過。
另一種是標記接口(不含方法聲明的接口)如Serializable:
image.png
將其作為標記來使用的好處是,可以在方法簽名中要求類包含哪些標記(即實現了哪些接口),從而使得不符合規范的代碼可以在編譯時及時檢查出來。
標記接口相較于標記注解的優點:
- 標記接口定義的類型是由被標記類的實例實現的。比如class A implements Serializable,那么所有使用Serializable作為參數的地方都可以用A。
- 可以被更加精確的鎖定。使用注解可以加在任何類上,如果一個標記只適用于特殊接口的實現,就可以使用標記接口。比如Set繼承于Collection,它沒有實現任何Collection的方法。Set的存在依據就是標記這個接口的所有實現類都是集合內元素唯一的。
- 注解的優點就是"更大注解機制的一部分",因此標記注解在支持標記的框架中具有一致性。
之前一直認為接口是用來定義行為的,沒想到沒有方法的接口還可以當做標記來使用。
當我們需要添加的標記只用于類級別時,可以優先使用標記接口。如果需要應用于任何程序元素時,則應該使用注解。