這個接口的主要做用就是找出類上標註的註解和註解的名稱。html
此接口在1.6中有四個方法,(1.8中又添加了幾個方法,都差很少)java
<T extends Annotation> T getAnnotation(Class<T> annotationClass) app
若是存在該元素的指定類型的註釋,則返回這些註釋,不然返回 null。 測試
Annotation[] getAnnotations() spa
返回此元素上存在的全部註釋。 code
Annotation[] getDeclaredAnnotations() htm
返回直接存在於此元素上的全部註釋。 blog
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 繼承
若是指定類型的註釋存在於此元素上,則返回 true,不然返回 false。 接口
如下經過示例解釋
先定義自定義註解,若是對自定義註解不瞭解請點擊深刻理解Java:註解(Annotation)自定義註解入門
寫main方法測試
Controller註解類
package com.hldh.test; import java.lang.annotation.*; /** * Created by liuhj on 2015/11/16. */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface Controller { String value() default "index"; }
而後寫測試類MainTest.java
package com.hldh.test; import java.lang.annotation.Annotation; /** * Created by liuhj on 2015/11/16. * 測試查找自定義註解 */ public class MainTest { public static void main(String args[]){ try{ //加載一個包含註解的類 Class<?> clazz = Class.forName("com.hldh.test.IndexController"); //判斷是否有某類型的註解,若是有,返回註解,沒有返回空 Controller controller = clazz.getAnnotation(Controller.class); System.out.println(controller); //@com.hldh.test.Controller(value=index) System.out.println(controller.value()); //返回controller註解的默認值 index //返回此元素上存在的全部註釋。 Annotation[] a = clazz.getAnnotations(); for(Annotation annotation :a){ System.out.println(annotation); //@com.hldh.test.Controller(value=index ) @com.hldh.test.RequestMapping(value=name) } //是否有指定類型的註解存在於類上 System.out.println(clazz.isAnnotationPresent(Controller.class)); //true 包含controller註解 //得到直接做用於此類的註解,繼承的註解得不到 Annotation[] a1 = clazz.getDeclaredAnnotations(); for(Annotation annotation :a1){ System.out.println(annotation); //@com.hldh.test.Controller(value=index ) @com.hldh.test.RequestMapping(value=name) } }catch (Exception e){ e.printStackTrace(); } } }
第四個方法獲取直接做用於此類的註解,這裏面涉及了註解的繼承,參考子類能夠繼承到父類上的註解嗎--有結論了。