掃碼下載編程獅APP
W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Annotation 其實就是代碼里的特殊標記, 它用于替代配置文件,也就是說,傳統(tǒng)方式通過配置文件告訴類如何運行,有了注解技術(shù)后,開發(fā)人員可以通過注解告訴類如何運行。在Java技術(shù)里注解的典型應用是:可以通過反射技術(shù)去得到類里面的注解,以決定怎么去運行類 - Annotation(注解)就是Java提供了一種元程序中的元素關聯(lián)任何信息和著任何元數(shù)據(jù)(metadata)的途徑和方法 - Annotion(注解)是一個接口,程序可以通過反射來獲取指定程序元素的Annotion對象,然后通過Annotion對象來獲取注解里面的元數(shù)據(jù) - Annotation(注解)是JDK5.0及以后版本引入的。它可以用于創(chuàng)建文檔,跟蹤代碼中的依賴性,甚至執(zhí)行基本編譯時檢查。從某些方面看,annotation就像修飾符一樣被使用,并應用于包、類 型、構(gòu)造方法、方法、成員變量、參數(shù)、本地變量的聲明中
<br> @Override: 限定重寫父類方法, 該注解只能用于方法 <br> @Deprecated: 用于表示某個程序元素(類, 方法等)已過時 <br> @SuppressWarnings: 抑制編譯器警告 <br> ```
使用@interface定義Annotation - 使用Annotation修飾程序中的類、方法、變量、接口等定義,通常我們會把Annotation放在所有修飾符之前 - 定義帶成員變量的Annotation - 為Annotation的成員變量指定初始值
Annotation接口來代表程序元素前面的注釋,該接口是所有Annotation類型的父接口 - AnnotatedElement接口代表程序中可以接受注釋的程序元素 - 調(diào)用AnnotatedElement對象的如下三個方法來訪問Annotation信息: - getAnnotation(Class<T& annotationClass):返回該程序元素上存在的、指定類型的注釋,如果該類型的注釋不存在,則返回null - Annotation[] getAnnotations():返回該程序元素上存在的所有注釋 - boolean isAnnotationPresent(Class<? extends Annotation& annotationClass):判斷該程序元素上是否包含指定類型的注釋,存在則返回true,否則返回false
自定義Annotation import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 定義一個注解 */ @Target(ElementType.METHOD) // 這是一個對方法的注解,還可以是包、類、變量等很多東西 @Retention(RetentionPolicy.RUNTIME) // 保留時間,一般注解就是為了框架開發(fā)時代替配置文件使用,JVM運行時用反射取參數(shù)處理,所以一般都為RUNTIME類型 @Documented // 用于描述其它類型的annotation應該被作為被標注的程序成員的公共API,因此可以被例如javadoc此類的工具文檔化 public @interface OneAnnotation { // 定義注解的參數(shù),類型可以為基本類型以及String、Class、enum、數(shù)組等,default為默認值 String parameter1() default ""; int parameter2() default -1; } 使用注解 /** * 一個用到了自定義的注解的類 */ public class OClass { @OneAnnotation(parameter1="YES", parameter2=10) public void oneMethod () { } } 獲取注解參數(shù) import java.lang.reflect.Method; public class TestDemo { public static void main(String[] args) throws Exception { // 提取到被注解的方法Method,這里用到了反射的知識 Method method = Class.forName("OneClass").getDeclaredMethod("oneMethod"); // 從Method方法中通過方法getAnnotation獲得我們設置的注解 OneAnnotation oneAnnotation = method.getAnnotation(OneAnnotation.class); // 得到注解的倆參數(shù) System.out.println(oneAnnotation.parameter1()); System.out.println(oneAnnotation.parameter2()); } }
import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 定義一個注解 */ @Target(ElementType.METHOD) // 這是一個對方法的注解,還可以是包、類、變量等很多東西 @Retention(RetentionPolicy.RUNTIME) // 保留時間,一般注解就是為了框架開發(fā)時代替配置文件使用,JVM運行時用反射取參數(shù)處理,所以一般都為RUNTIME類型 @Documented // 用于描述其它類型的annotation應該被作為被標注的程序成員的公共API,因此可以被例如javadoc此類的工具文檔化 public @interface OneAnnotation { // 定義注解的參數(shù),類型可以為基本類型以及String、Class、enum、數(shù)組等,default為默認值 String parameter1() default ""; int parameter2() default -1; }
/** * 一個用到了自定義的注解的類 */ public class OClass { @OneAnnotation(parameter1="YES", parameter2=10) public void oneMethod () { } }
import java.lang.reflect.Method; public class TestDemo { public static void main(String[] args) throws Exception { // 提取到被注解的方法Method,這里用到了反射的知識 Method method = Class.forName("OneClass").getDeclaredMethod("oneMethod"); // 從Method方法中通過方法getAnnotation獲得我們設置的注解 OneAnnotation oneAnnotation = method.getAnnotation(OneAnnotation.class); // 得到注解的倆參數(shù) System.out.println(oneAnnotation.parameter1()); System.out.println(oneAnnotation.parameter2()); } }
更多建議:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: