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


  之前在開發中,就總納悶,為什么繼承接口時,會出現@Override注解,有時候還會提示寫注解@SuppressWarnings?

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

  那么什么是注解呢?

  注解就是某種注解類型的一個實例,我們可以用它在某個類上進行標注,這樣編譯器在編譯我們的文件時,會根據我們自己設定的方法來編譯類。

  注解都是什么呢?看下面這張圖就明白了!

  上面的圖可以看出,注解大體上分為三種:標記注解,一般注解,元注解

  

  @Override用於標識,該方法是繼承自超類的。這樣,當超類的方法修改后,實現類就可以直接看到了。

  而@Deprecated注解,則是標識當前方法或者類已經不推薦使用,如果用戶還是要使用,會生成編譯的警告。

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

 

  其他的不多說了,標准元注解 都是干嘛的呢?

  @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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM