Annotations

 

/**定義該註解能使用的位置,如今表示同在方法上**/
/**
 * ElementType下還包括:
 * CONSTRUCTOR:構造函數聲明;
 * FIELE:屬性聲明,包括枚舉;
 * LOCAL_VARIABLE:本地變量
 * PACKAGE:包級別
 * PARAMETER:參數級別
 * TYPE:類、接口(包括註解本身自己)、枚舉
 */
@Target(value = { ElementType.METHOD })
/**定義該註解可用範圍,如今表示在運行時可用**/
/**
 *RetentionPolicy還包括:
 *SOURCE:註解只在編譯器有效
 *CLASS:只活動在編譯器的class文件裏,jvm時期就無效
 *RUNTIME:運行時jvm仍然保持着,可以反射獲得
 */
@Retention(RetentionPolicy.RUNTIME)
/**
 *除了以上兩個註解還有兩個:
 *@Documented:生成文檔時也一塊兒帶到文檔中去
 *@Inherted:容許子類繼承父類的註解
 */
/**註解不容許繼承 不能 extends @interface**/
public @interface Test {
	/**註解元素不容許使用包裝類型**/
	public int id();
	public String description() default "no description";
}



public class UseAnnotation {
	public static void main(String[] args) {
		Class<?> clazz = AddAnnotation.class;
		Method [] ms = clazz.getDeclaredMethods();
		for(Method m : ms) {
			Test t = m.getAnnotation(Test.class);
			if(null != t) {
				System.out.println(t.id()+t.description());
			}
		}
	}
}
class AddAnnotation {
	@Test(id=10)
	public void method() {
		
	}
	@Test(id=11,description="method2")
	public void mehtod2() {
		
	}
	/**也能夠聲明在方法參數上!!而且不用@Test**/
	public void method3(Test test) {
		if(test.id()==10) {
		}
	}
}
相關文章
相關標籤/搜索