java中的註解

1)自定義註解:java

1)定義註解:
	語法:public [@interface](https://my.oschina.net/u/996807) 註解名{}
	舉例:
		public [@interface](https://my.oschina.net/u/996807) MyAnnotation{
			String name() default "jack";
		}

2)定義註解的屬性:
	語法:
		類型 屬性名();
		類型 屬性名() default 默認值;
	
	賦值:
		說明:在使用時,進行賦值。
		舉例:@MyAnnotation(name="hello")
	
	特殊屬性value:

		類型 value();
			只給value設值:	@MyAnnotation(value="hello") 或 @MyAnnotation("hello")
			給多個屬性設值:@MyAnnotation(value="hello",name="aaa")
		
		類型[] value();
			只給value設值:	@MyAnnotation(value={"a","b"}) 或 @MyAnnotation({"a","b"}) 或 @MyAnnotation({"a"}) 或 @MyAnnotation("a")			
			給多個屬性設值:同上。

	注意:註解的屬性的類型只能是:基本類型、String、Class、枚舉、註解類型 和 這些類型的一維數組。

2)元註解:數組

1)概念:加在註解上的註解。

2)經常使用的元註解:
	@Retention:註解的保留範圍
		RetentionPolicy.SOURCE:	註解存在於源文件中
		RetentionPolicy.CLASS:		註解存在於字節碼文件中
		RetentionPolicy.RUNTIME:	註解存在於運行時
		
	@Target:註解出現的位置
		eg:@Target(ElementType.METHOD)
			@Target({ElementType.FIELD,ElementType.METHOD})
			
	@Inherited:  被該元註解修飾的Annotation類將具備繼承性,若是某個類使用了被@Inherited修飾的Annotation, 則該類的子類會自動加上這個被@Inherited修飾的Annotation。

	@Documented: 被該元註解修飾的Annotation類將被javadoc工具提取成文檔。

3)註解處理器相關API:工具

1)java.lang.annotation.Annotation:
	說明:該接口是全部註解類的父接口。

2)java.lang.reflect.AnnotatedElement:	
	概念:表示一個正在VM中運行而且被註解修飾的元素(類、方法、字段等),該接口容許經過反射的方式來讀取元素上的註解。
	
	實現類:java.lang.reflect包下的:Class、Constructor、Method、Field、Package
	
	說明:該接口中的方法返回的全部註解都是不可變的。

	該接口中的方法:
		1>getAnnotation(clazz)
			<T extends Annotation> T getAnnotation(Class<T> annotationClass):
			說明:若是該元素被指定類型的註解所修飾,則返回該註解,不然返回null。

		2>getAnnotations()	
			Annotation[] getAnnotations()
			說明:返回此元素上全部的註解。

		3>getDeclaredAnnotations()	
			Annotation[] getDeclaredAnnotations()
			說明:返回直接在該元素上修飾的全部的註解,該方法會忽略掉從父類繼承過來的註解。
		
		4>isAnnotationPresent(clazz)
			boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
			說明:判斷該元素是否被指定類型的註解修飾。
相關文章
相關標籤/搜索