對於註解,相信你們都不陌生了,可是這種熟悉對於Android開發者來講,也就是僅僅是它認識你,你不認識它吧,由於,咱們幾乎都停留在用上了。像dagger2,像retrofit,像greenDao,他們都是滿滿的使用了註解,而咱們只是停留在知其然缺不知其因此然的層面,那麼我本次分享講分紅幾批博客共享給你們一個體系的又不失針對Android平臺須要的恰到好處的給你們整理真正須要掌握的知識體系。面試
Java 註解用於爲 Java 代碼提供元數據。做爲元數據,註解不直接影響你的代碼執行,但也有一些類型的註解實際上能夠用於這一目的。Java 註解是從 Java5 開始添加到 Java 的。數組
若是把代碼想象成一個具備生命的個體,註解就是給這些代碼的某些個體打標籤bash
public @interface Test {
}複製代碼
它的形式跟接口很相似,不過前面多了一個 @ 符號。上面的代碼就建立了一個名字爲 Test 的註解。微信
你能夠簡單理解爲建立了一張名字爲 Test的標籤。markdown
@Test
public class TestAnnotation {
}複製代碼
建立一個類 TestAnnotation,而後在類定義的地方加上 @Test就能夠用 Test註解這個類了架構
你能夠簡單理解爲將 Test 這張標籤貼到 TestAnnotation這個類上面。工具
元註解是能夠註解到註解上的註解,或者說元註解是一種基本註解,可是它可以應用到其它的註解上面。spa
若是難於理解的話,你能夠這樣理解。元註解也是一張標籤,可是它是一張特殊的標籤,它的做用和目的就是給其餘普通的標籤進行解釋說明的。code
元標籤有 @Retention、@Documented、@Target、@Inherited、@Repeatable 5 種。orm
註解的屬性也叫作成員變量。註解只有成員變量,沒有方法。
須要注意的是,在註解中定義屬性時它的類型必須是 8 種基本數據類型外加 類、接口、註解及它們的數組
註解中屬性能夠有默認值,默認值須要用 default 關鍵值指定
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Test{ int id() default -1; String msg() default "Hello"; }複製代碼
上面代碼定義了 TestAnnotation 這個註解中擁有 id 和 msg 兩個屬性。在使用的時候,咱們應該給它們進行賦值。
賦值的方式是在註解的括號內以 value="" 形式,多個屬性以前用 ,隔開
@Test(id=1,msg="hello annotation") public class TestAnnotation { }複製代碼
註解與反射。
註解經過反射獲取。首先能夠經過 Class 對象的 isAnnotationPresent() 方法判斷它是否應用了某個註解
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {}複製代碼
而後經過 getAnnotation() 方法來獲取 Annotation 對象。
public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {複製代碼
或者是 getAnnotations() 方法。
public Annotation[] getAnnotations() {}複製代碼
前一種方法返回指定類型的註解,後一種方法返回註解到這個元素上的全部註解。
若是獲取到的 Annotation 若是不爲 null,則就能夠調用它們的屬性方法了。好比
@Test() public class TestDemo{ public static void main(String[] args) { boolean hasAnnotation = TestDemo.class.isAnnotationPresent(Test.class); if ( hasAnnotation ) { TestAnnotation testAnnotation = TestDemo.class.getAnnotation(Test.class); System.out.println("id:"+testAnnotation.id()); System.out.println("msg:"+testAnnotation.msg()); } } }複製代碼
讀到這的朋友以爲不錯能夠點贊關注下,感謝您的支持,之後會不停更新更多精選乾貨及資訊分享,歡迎你們在評論區留言討論!
歡迎關注享學課堂online微信公衆號,天天會持續更新技術乾貨,熱點,吐槽等文章,還有免費的Android架構視頻資料和麪試專題資料免費領取分享,後臺回覆關鍵字【Android資料】,免費獲取Android架構面試專題文檔資料、電子書及更多架構進階視頻資料(視頻+筆記)