注解毫無疑問是一個很好玩的特性,之前看書的時候也沒有太過注意,最近看Spring實戰的時候又看到了自定義注解,於是忍不住把Java編程思想掏出來重新看了下注解這章,順帶記個筆記
注解的形式就是代碼裡寫的比如
@Override
這樣的代碼
和注釋相比較,最主要的也是最有趣的地方在於注解可以自定義,而且也可以使用反射來調用被注解的類,方法
在Java裡創建自定義注解的格式如下
/* * file:Test.java */ package javaapplication; import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Test { public int id(); public String text() default "Null"; }
於是我們就可以在代碼裡使用注解了,比如這樣
/* * file:JavaApplication.java */ package javaapplication; import java.lang.reflect.Method; class TestObject { @Test(id = 233,text = "Hello") public void testA(int id,String text){ System.out.println("id:"+id+"\ttext:"+text); } @Test(id = 10) public void testB(int id,String text){ System.out.println("id:"+id+"\ttext:"+text); } } public class JavaApplication { public static void main(String[] args) throws Exception{ TestObject to = new TestObject(); //通過反射來使用注解裡的數據動態調用方法 for (Method m : TestObject.class.getDeclaredMethods()) { Test t = m.getAnnotation(Test.class); if (t != null) { m.invoke(to, t.id(),t.text()); } } } }
簡單說了說注解的寫法,然後來談談元注解
元注解就是用來注解注解的注解,恩,我故意說這麼繞的
就是@Target之類的,具體Java編程思想上給出下表
表示該注解可以用於什麼地方。可能的ElementType參數包括:
表示需要在什麼級別保存注解信息。可選的RetentionPolicy參數包括:
另外,注解元素支持以下類型
注解簡單的筆記就到這裡結束了
注解還可以用apt處理,用於觀察者模式,用於單元測試等等,更加詳細的說明歡迎閱讀《Java編程思想》第20章-注解