【java開發系列】—— 自定義註解

  以前在開發中,就總納悶,爲何繼承接口時,會出現@Override註解,有時候還會提示寫註解@SuppressWarnings?java

  原來這是java特有的特性,註解!

  那麼什麼是註解呢?ide

  註解就是某種註解類型的一個實例,咱們能夠用它在某個類上進行標註,這樣編譯器在編譯咱們的文件時,會根據咱們本身設定的方法來編譯類。測試

  註解都是什麼呢?看下面這張圖就明白了!spa

  上面的圖能夠看出,註解大致上分爲三種:標記註解,通常註解,元註解code

  

  這裏面Override這個沒測試出來,由於目前的Eclipse會自動幫咱們排錯,若是類型不符,是沒有辦法進行覆蓋的。blog

  而Deprecated註解,除了多個刪除線,並無什麼攔截功能。繼承

  上面的測試,也僅僅是針對IDE,若是是利用javac,應該會有提示的。接口

 

  其餘的很少說了,標準元註解 都是幹嗎的呢?ip

  @Documented 標記生成javadoc開發

  @Inherited 標記繼承關係

  @Retention 註解的生存期

  @Target 標註的目標

  

下面咱們本身作一個註解!

  首先聲明一個接口,並未它添加註解內容!

 1 package testAnnotation;  2 
 3 import java.lang.annotation.Documented;  4 import java.lang.annotation.Retention;  5 import java.lang.annotation.RetentionPolicy;  6 
 7 @Documented  8 @Retention(RetentionPolicy.RUNTIME)  9 public @interface Person{ 10  String name(); 11     int age(); 12 }

 

  而後利用反射機制查看類的註解內容

 1 package testAnnotation;  2 
 3 @Person(name="xingoo",age=25)  4 public class test3 {  5     public static void print(Class c){  6  System.out.println(c.getName());  7         
 8         //java.lang.Class的getAnnotation方法,若是有註解,則返回註解。不然返回null
 9         Person person = (Person)c.getAnnotation(Person.class); 10         
11         if(person != null){ 12             System.out.println("name:"+person.name()+" age:"+person.age()); 13         }else{ 14             System.out.println("person unknown!"); 15  } 16  } 17     public static void main(String[] args){ 18         test3.print(test3.class); 19  } 20 }

  運行結果,讀取到了註解的內容

testAnnotation.test3 name:xingoo age:25
相關文章
相關標籤/搜索